Full Code of Duankaiwen/LSNet for AI

main eefd0d2685aa cached
661 files
5.0 MB
1.3M tokens
2934 symbols
1 requests
Download .txt
Showing preview only (5,374K chars total). Download the full file or copy to clipboard to get everything.
Repository: Duankaiwen/LSNet
Branch: main
Commit: eefd0d2685aa
Files: 661
Total size: 5.0 MB

Directory structure:
gitextract_ye5co4e2/

├── README.md
├── checkpoints/
│   └── 000.txt
├── code/
│   ├── LICENSE
│   ├── ThirdPartyNotices.txt
│   ├── cocoapi/
│   │   ├── .github/
│   │   │   └── workflows/
│   │   │       ├── build.yml
│   │   │       └── deploy.yml
│   │   ├── .gitignore
│   │   ├── .isort.cfg
│   │   ├── .pre-commit-config.yaml
│   │   ├── MANIFEST.in
│   │   ├── README.md
│   │   ├── license.txt
│   │   ├── lvis/
│   │   │   ├── lvis/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── colormap.py
│   │   │   │   ├── eval.py
│   │   │   │   ├── lvis.py
│   │   │   │   ├── results.py
│   │   │   │   └── vis.py
│   │   │   ├── requirements.txt
│   │   │   └── setup.py
│   │   └── pycocotools/
│   │       ├── MANIFEST.in
│   │       ├── Makefile
│   │       ├── common/
│   │       │   ├── gason.cpp
│   │       │   ├── gason.h
│   │       │   ├── maskApi.c
│   │       │   └── maskApi.h
│   │       ├── pycocoDemo.ipynb
│   │       ├── pycocoEvalDemo.ipynb
│   │       ├── pycocotools/
│   │       │   ├── __init__.py
│   │       │   ├── _mask.pyx
│   │       │   ├── coco.py
│   │       │   ├── cocoeval.py
│   │       │   └── mask.py
│   │       └── setup.py
│   ├── configs/
│   │   ├── _base_/
│   │   │   ├── datasets/
│   │   │   │   ├── cityscapes_detection.py
│   │   │   │   ├── cityscapes_instance.py
│   │   │   │   ├── coco_detection.py
│   │   │   │   ├── coco_instance.py
│   │   │   │   ├── coco_instance_semantic.py
│   │   │   │   ├── coco_lsvr.py
│   │   │   │   ├── coco_pose.py
│   │   │   │   ├── deepfashion.py
│   │   │   │   ├── lvis_instance.py
│   │   │   │   ├── voc0712.py
│   │   │   │   └── wider_face.py
│   │   │   ├── default_runtime.py
│   │   │   ├── models/
│   │   │   │   ├── cascade_mask_rcnn_r50_fpn.py
│   │   │   │   ├── cascade_rcnn_r50_fpn.py
│   │   │   │   ├── fast_rcnn_r50_fpn.py
│   │   │   │   ├── faster_rcnn_r50_caffe_c4.py
│   │   │   │   ├── faster_rcnn_r50_fpn.py
│   │   │   │   ├── mask_rcnn_r50_caffe_c4.py
│   │   │   │   ├── mask_rcnn_r50_fpn.py
│   │   │   │   ├── retinanet_r50_fpn.py
│   │   │   │   ├── rpn_r50_caffe_c4.py
│   │   │   │   ├── rpn_r50_fpn.py
│   │   │   │   └── ssd300.py
│   │   │   └── schedules/
│   │   │       ├── schedule_1x.py
│   │   │       ├── schedule_20e.py
│   │   │       └── schedule_2x.py
│   │   └── lsnet/
│   │       ├── lsnet_bbox_cpv_res2_101_fpn_dconv_c3-c5_mstrain_2x_coco.py
│   │       ├── lsnet_bbox_cpv_x101_fpn_dconv_c3-c5_mstrain_2x_coco.py
│   │       ├── lsnet_bbox_r50_fpn_1x_coco.py
│   │       ├── lsnet_bbox_r50_fpn_mstrain_2x_coco.py
│   │       ├── lsnet_bbox_x101_fpn_dconv_c3-c5_mstrain_2x_coco.py.py
│   │       ├── lsnet_bbox_x101_fpn_mstrain_2x_coco.py
│   │       ├── lsnet_pose_bbox_r50_fpn_1x_coco.py
│   │       ├── lsnet_pose_bbox_r50_fpn_mstrain_2x_coco.py
│   │       ├── lsnet_pose_bbox_res2_101_fpn_dconv_c3-c5_mstrain_2x_coco.py
│   │       ├── lsnet_pose_bbox_x101_fpn_dconv_c3-c5_mstrain_2x_coco.py
│   │       ├── lsnet_pose_kbox_res2_101_fpn_dconv_c3-c5_mstrain_2x_coco.py
│   │       ├── lsnet_pose_kbox_x101_fpn_dconv_c3-c5_mstrain_2x_coco.py
│   │       ├── lsnet_segm_r50_fpn_1x_coco.py
│   │       ├── lsnet_segm_r50_fpn_mstrain_2x_coco.py
│   │       ├── lsnet_segm_res2_101_fpn_dconv_c3-c5_mstrain_30e_coco.py
│   │       ├── lsnet_segm_x101_fpn_dconv_c3-c5_mstrain_30e_coco.py
│   │       └── lsnet_segm_x101_fpn_mstrain_30e_coco.py
│   ├── docker/
│   │   └── Dockerfile
│   ├── docs/
│   │   ├── Makefile
│   │   ├── api.rst
│   │   ├── changelog.md
│   │   ├── compatibility.md
│   │   ├── conf.py
│   │   ├── config.md
│   │   ├── getting_started.md
│   │   ├── index.rst
│   │   ├── install.md
│   │   ├── make.bat
│   │   ├── model_zoo.md
│   │   ├── projects.md
│   │   ├── robustness_benchmarking.md
│   │   └── tutorials/
│   │       ├── data_pipeline.md
│   │       ├── finetune.md
│   │       ├── new_dataset.md
│   │       └── new_modules.md
│   ├── mmcv/
│   │   ├── .dockerignore
│   │   ├── .github/
│   │   │   └── workflows/
│   │   │       ├── build.yml
│   │   │       └── publish-to-pypi.yml
│   │   ├── .gitignore
│   │   ├── .pre-commit-config.yaml
│   │   ├── .readthedocs.yml
│   │   ├── CONTRIBUTING.md
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── MANIFEST.in
│   │   ├── README.rst
│   │   ├── docs/
│   │   │   ├── Makefile
│   │   │   ├── api.rst
│   │   │   ├── cnn.md
│   │   │   ├── conf.py
│   │   │   ├── image.md
│   │   │   ├── index.rst
│   │   │   ├── io.md
│   │   │   ├── make.bat
│   │   │   ├── model_zoo.md
│   │   │   ├── requirements.txt
│   │   │   ├── runner.md
│   │   │   ├── utils.md
│   │   │   ├── video.md
│   │   │   └── visualization.md
│   │   ├── examples/
│   │   │   ├── config_cifar10.py
│   │   │   ├── dist_train_cifar10.sh
│   │   │   ├── resnet_cifar.py
│   │   │   └── train_cifar10.py
│   │   ├── mmcv/
│   │   │   ├── __init__.py
│   │   │   ├── arraymisc/
│   │   │   │   ├── __init__.py
│   │   │   │   └── quantization.py
│   │   │   ├── cnn/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── alexnet.py
│   │   │   │   ├── bricks/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── activation.py
│   │   │   │   │   ├── conv.py
│   │   │   │   │   ├── conv_module.py
│   │   │   │   │   ├── hsigmoid.py
│   │   │   │   │   ├── hswish.py
│   │   │   │   │   ├── non_local.py
│   │   │   │   │   ├── norm.py
│   │   │   │   │   ├── padding.py
│   │   │   │   │   ├── registry.py
│   │   │   │   │   ├── scale.py
│   │   │   │   │   └── upsample.py
│   │   │   │   ├── resnet.py
│   │   │   │   ├── utils/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── flops_counter.py
│   │   │   │   │   └── weight_init.py
│   │   │   │   └── vgg.py
│   │   │   ├── fileio/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── file_client.py
│   │   │   │   ├── handlers/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── json_handler.py
│   │   │   │   │   ├── pickle_handler.py
│   │   │   │   │   └── yaml_handler.py
│   │   │   │   ├── io.py
│   │   │   │   └── parse.py
│   │   │   ├── image/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── colorspace.py
│   │   │   │   ├── geometric.py
│   │   │   │   ├── io.py
│   │   │   │   └── photometric.py
│   │   │   ├── model_zoo/
│   │   │   │   ├── deprecated.json
│   │   │   │   └── open_mmlab.json
│   │   │   ├── parallel/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── _functions.py
│   │   │   │   ├── collate.py
│   │   │   │   ├── data_container.py
│   │   │   │   ├── data_parallel.py
│   │   │   │   ├── distributed.py
│   │   │   │   ├── distributed_deprecated.py
│   │   │   │   ├── registry.py
│   │   │   │   ├── scatter_gather.py
│   │   │   │   └── utils.py
│   │   │   ├── runner/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base_runner.py
│   │   │   │   ├── checkpoint.py
│   │   │   │   ├── dist_utils.py
│   │   │   │   ├── epoch_based_runner.py
│   │   │   │   ├── hooks/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── checkpoint.py
│   │   │   │   │   ├── closure.py
│   │   │   │   │   ├── hook.py
│   │   │   │   │   ├── iter_timer.py
│   │   │   │   │   ├── logger/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── base.py
│   │   │   │   │   │   ├── mlflow.py
│   │   │   │   │   │   ├── pavi.py
│   │   │   │   │   │   ├── tensorboard.py
│   │   │   │   │   │   ├── text.py
│   │   │   │   │   │   └── wandb.py
│   │   │   │   │   ├── lr_updater.py
│   │   │   │   │   ├── memory.py
│   │   │   │   │   ├── momentum_updater.py
│   │   │   │   │   ├── optimizer.py
│   │   │   │   │   └── sampler_seed.py
│   │   │   │   ├── iter_based_runner.py
│   │   │   │   ├── log_buffer.py
│   │   │   │   ├── optimizer/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── builder.py
│   │   │   │   │   └── default_constructor.py
│   │   │   │   ├── priority.py
│   │   │   │   └── utils.py
│   │   │   ├── utils/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── config.py
│   │   │   │   ├── env.py
│   │   │   │   ├── logging.py
│   │   │   │   ├── misc.py
│   │   │   │   ├── parrots_wrapper.py
│   │   │   │   ├── path.py
│   │   │   │   ├── progressbar.py
│   │   │   │   ├── registry.py
│   │   │   │   └── timer.py
│   │   │   ├── version.py
│   │   │   ├── video/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── io.py
│   │   │   │   ├── optflow.py
│   │   │   │   ├── optflow_warp/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── flow_warp.cpp
│   │   │   │   │   ├── flow_warp.hpp
│   │   │   │   │   └── flow_warp_module.pyx
│   │   │   │   └── processing.py
│   │   │   └── visualization/
│   │   │       ├── __init__.py
│   │   │       ├── color.py
│   │   │       ├── image.py
│   │   │       └── optflow.py
│   │   ├── requirements.txt
│   │   ├── setup.cfg
│   │   ├── setup.py
│   │   └── tests/
│   │       ├── data/
│   │       │   ├── config/
│   │       │   │   ├── a.b.py
│   │       │   │   ├── a.py
│   │       │   │   ├── b.json
│   │       │   │   ├── base.py
│   │       │   │   ├── c.yaml
│   │       │   │   ├── code.py
│   │       │   │   ├── d.py
│   │       │   │   ├── delete.py
│   │       │   │   ├── e.py
│   │       │   │   ├── f.py
│   │       │   │   ├── g.py
│   │       │   │   ├── i_base.py
│   │       │   │   ├── i_child.py
│   │       │   │   ├── l.py
│   │       │   │   ├── l1.py
│   │       │   │   ├── l2.yaml
│   │       │   │   ├── l3.json
│   │       │   │   ├── l4.py
│   │       │   │   ├── m.py
│   │       │   │   └── n.py
│   │       │   ├── demo.lmdb/
│   │       │   │   ├── data.mdb
│   │       │   │   └── lock.mdb
│   │       │   ├── filelist.txt
│   │       │   ├── for_scan/
│   │       │   │   ├── 1.json
│   │       │   │   ├── 1.txt
│   │       │   │   ├── 2.json
│   │       │   │   ├── 2.txt
│   │       │   │   └── sub/
│   │       │   │       ├── 1.json
│   │       │   │       └── 1.txt
│   │       │   ├── mapping.txt
│   │       │   ├── model_zoo/
│   │       │   │   ├── deprecated.json
│   │       │   │   ├── mmcv_home/
│   │       │   │   │   ├── open_mmlab.json
│   │       │   │   │   ├── test.pth
│   │       │   │   │   └── val.pth
│   │       │   │   └── open_mmlab.json
│   │       │   ├── optflow.flo
│   │       │   └── patches/
│   │       │       ├── 0.npy
│   │       │       ├── 1.npy
│   │       │       ├── 2.npy
│   │       │       ├── 3.npy
│   │       │       ├── 4.npy
│   │       │       ├── pad0_0.npy
│   │       │       ├── pad0_1.npy
│   │       │       ├── pad0_2.npy
│   │       │       ├── pad0_3.npy
│   │       │       ├── pad0_4.npy
│   │       │       ├── pad_0.npy
│   │       │       ├── pad_1.npy
│   │       │       ├── pad_2.npy
│   │       │       ├── pad_3.npy
│   │       │       ├── pad_4.npy
│   │       │       ├── scale_0.npy
│   │       │       ├── scale_1.npy
│   │       │       ├── scale_2.npy
│   │       │       ├── scale_3.npy
│   │       │       └── scale_4.npy
│   │       ├── test_arraymisc.py
│   │       ├── test_cnn/
│   │       │   ├── test_build_layers.py
│   │       │   ├── test_conv_module.py
│   │       │   ├── test_flops_counter.py
│   │       │   ├── test_hsigmoid.py
│   │       │   ├── test_hswish.py
│   │       │   ├── test_non_local.py
│   │       │   ├── test_scale.py
│   │       │   └── test_weight_init.py
│   │       ├── test_config.py
│   │       ├── test_fileclient.py
│   │       ├── test_fileio.py
│   │       ├── test_image/
│   │       │   ├── test_colorspace.py
│   │       │   ├── test_geometric.py
│   │       │   ├── test_io.py
│   │       │   └── test_photometric.py
│   │       ├── test_load_model_zoo.py
│   │       ├── test_logging.py
│   │       ├── test_misc.py
│   │       ├── test_optimizer.py
│   │       ├── test_parallel.py
│   │       ├── test_path.py
│   │       ├── test_progressbar.py
│   │       ├── test_registry.py
│   │       ├── test_runner/
│   │       │   ├── test_dist_utils.py
│   │       │   ├── test_hooks.py
│   │       │   └── test_runner.py
│   │       ├── test_timer.py
│   │       ├── test_video/
│   │       │   ├── test_optflow.py
│   │       │   ├── test_processing.py
│   │       │   └── test_reader.py
│   │       └── test_visualization.py
│   ├── mmdet/
│   │   ├── VERSION
│   │   ├── __init__.py
│   │   ├── apis/
│   │   │   ├── __init__.py
│   │   │   ├── inference.py
│   │   │   ├── test.py
│   │   │   └── train.py
│   │   ├── core/
│   │   │   ├── __init__.py
│   │   │   ├── anchor/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── anchor_generator.py
│   │   │   │   ├── builder.py
│   │   │   │   ├── point_generator.py
│   │   │   │   └── utils.py
│   │   │   ├── bbox/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── assigners/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── approx_max_iou_assigner.py
│   │   │   │   │   ├── assign_result.py
│   │   │   │   │   ├── atss_assigner.py
│   │   │   │   │   ├── base_assigner.py
│   │   │   │   │   ├── center_region_assigner.py
│   │   │   │   │   ├── centroid_assigner.py
│   │   │   │   │   ├── fcos_assigner.py
│   │   │   │   │   ├── max_iou_assigner.py
│   │   │   │   │   ├── point_assigner.py
│   │   │   │   │   ├── point_assigner_v2.py
│   │   │   │   │   ├── point_ct_assigner.py
│   │   │   │   │   └── point_hm_assigner.py
│   │   │   │   ├── builder.py
│   │   │   │   ├── coder/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base_bbox_coder.py
│   │   │   │   │   ├── delta_xywh_bbox_coder.py
│   │   │   │   │   ├── legacy_delta_xywh_bbox_coder.py
│   │   │   │   │   ├── pseudo_bbox_coder.py
│   │   │   │   │   └── tblr_bbox_coder.py
│   │   │   │   ├── demodata.py
│   │   │   │   ├── iou_calculators/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── builder.py
│   │   │   │   │   └── iou2d_calculator.py
│   │   │   │   ├── samplers/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base_sampler.py
│   │   │   │   │   ├── combined_sampler.py
│   │   │   │   │   ├── instance_balanced_pos_sampler.py
│   │   │   │   │   ├── iou_balanced_neg_sampler.py
│   │   │   │   │   ├── ohem_sampler.py
│   │   │   │   │   ├── pseudo_sampler.py
│   │   │   │   │   ├── random_sampler.py
│   │   │   │   │   ├── sampling_result.py
│   │   │   │   │   └── score_hlr_sampler.py
│   │   │   │   └── transforms.py
│   │   │   ├── evaluation/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── bbox_overlaps.py
│   │   │   │   ├── class_names.py
│   │   │   │   ├── eval_hooks.py
│   │   │   │   ├── mean_ap.py
│   │   │   │   └── recall.py
│   │   │   ├── fp16/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── decorators.py
│   │   │   │   ├── hooks.py
│   │   │   │   └── utils.py
│   │   │   ├── mask/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── mask_target.py
│   │   │   │   ├── structures.py
│   │   │   │   └── utils.py
│   │   │   ├── post_processing/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── bbox_nms.py
│   │   │   │   └── merge_augs.py
│   │   │   └── utils/
│   │   │       ├── __init__.py
│   │   │       ├── dist_utils.py
│   │   │       └── misc.py
│   │   ├── datasets/
│   │   │   ├── __init__.py
│   │   │   ├── builder.py
│   │   │   ├── cityscapes.py
│   │   │   ├── coco.py
│   │   │   ├── coco_pose.py
│   │   │   ├── custom.py
│   │   │   ├── dataset_wrappers.py
│   │   │   ├── deepfashion.py
│   │   │   ├── lvis.py
│   │   │   ├── pipelines/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── auto_augment.py
│   │   │   │   ├── compose.py
│   │   │   │   ├── formating.py
│   │   │   │   ├── formating_reppointsv2.py
│   │   │   │   ├── instaboost.py
│   │   │   │   ├── loading.py
│   │   │   │   ├── loading_reppointsv2.py
│   │   │   │   ├── test_time_aug.py
│   │   │   │   └── transforms.py
│   │   │   ├── samplers/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── distributed_sampler.py
│   │   │   │   └── group_sampler.py
│   │   │   ├── voc.py
│   │   │   ├── wider_face.py
│   │   │   └── xml_style.py
│   │   ├── models/
│   │   │   ├── __init__.py
│   │   │   ├── backbones/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── detectors_resnet.py
│   │   │   │   ├── detectors_resnext.py
│   │   │   │   ├── hourglass.py
│   │   │   │   ├── hrnet.py
│   │   │   │   ├── mobilenet.py
│   │   │   │   ├── regnet.py
│   │   │   │   ├── res2net.py
│   │   │   │   ├── resnet.py
│   │   │   │   ├── resnext.py
│   │   │   │   └── ssd_vgg.py
│   │   │   ├── builder.py
│   │   │   ├── dense_heads/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── anchor_free_head.py
│   │   │   │   ├── anchor_head.py
│   │   │   │   ├── atss_head.py
│   │   │   │   ├── base_dense_head.py
│   │   │   │   ├── dense_reppoints_head.py
│   │   │   │   ├── dense_reppoints_v2_head.py
│   │   │   │   ├── fcos_head.py
│   │   │   │   ├── fovea_head.py
│   │   │   │   ├── free_anchor_retina_head.py
│   │   │   │   ├── fsaf_head.py
│   │   │   │   ├── ga_retina_head.py
│   │   │   │   ├── ga_rpn_head.py
│   │   │   │   ├── gfl_head.py
│   │   │   │   ├── guided_anchor_head.py
│   │   │   │   ├── lscpvnet_head.py
│   │   │   │   ├── lsnet_head.py
│   │   │   │   ├── nasfcos_head.py
│   │   │   │   ├── pisa_retinanet_head.py
│   │   │   │   ├── pisa_ssd_head.py
│   │   │   │   ├── reppoints_head.py
│   │   │   │   ├── reppoints_v2_head.py
│   │   │   │   ├── retina_head.py
│   │   │   │   ├── retina_sepbn_head.py
│   │   │   │   ├── rpn_head.py
│   │   │   │   ├── rpn_test_mixin.py
│   │   │   │   └── ssd_head.py
│   │   │   ├── detectors/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── atss.py
│   │   │   │   ├── base.py
│   │   │   │   ├── cascade_rcnn.py
│   │   │   │   ├── dense_reppoints_detector.py
│   │   │   │   ├── dense_reppoints_v2_detector.py
│   │   │   │   ├── fast_rcnn.py
│   │   │   │   ├── faster_rcnn.py
│   │   │   │   ├── fcos.py
│   │   │   │   ├── fovea.py
│   │   │   │   ├── fsaf.py
│   │   │   │   ├── gfl.py
│   │   │   │   ├── grid_rcnn.py
│   │   │   │   ├── htc.py
│   │   │   │   ├── lscpvnet.py
│   │   │   │   ├── lsnet.py
│   │   │   │   ├── mask_rcnn.py
│   │   │   │   ├── mask_scoring_rcnn.py
│   │   │   │   ├── nasfcos.py
│   │   │   │   ├── point_rend.py
│   │   │   │   ├── reppoints_detector.py
│   │   │   │   ├── reppoints_v2_detector.py
│   │   │   │   ├── retinanet.py
│   │   │   │   ├── rpn.py
│   │   │   │   ├── single_stage.py
│   │   │   │   └── two_stage.py
│   │   │   ├── losses/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── accuracy.py
│   │   │   │   ├── ae_loss.py
│   │   │   │   ├── balanced_l1_loss.py
│   │   │   │   ├── chamfer_loss.py
│   │   │   │   ├── cross_entropy_loss.py
│   │   │   │   ├── cross_iou_loss.py
│   │   │   │   ├── focal_loss.py
│   │   │   │   ├── gaussian_focal_loss.py
│   │   │   │   ├── gfocal_loss.py
│   │   │   │   ├── ghm_loss.py
│   │   │   │   ├── iou_loss.py
│   │   │   │   ├── mse_loss.py
│   │   │   │   ├── pisa_loss.py
│   │   │   │   ├── smooth_l1_loss.py
│   │   │   │   └── utils.py
│   │   │   ├── necks/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── bfp.py
│   │   │   │   ├── fpn.py
│   │   │   │   ├── fpn_carafe.py
│   │   │   │   ├── hrfpn.py
│   │   │   │   ├── nas_fpn.py
│   │   │   │   ├── nasfcos_fpn.py
│   │   │   │   ├── pafpn.py
│   │   │   │   └── rfp.py
│   │   │   ├── roi_heads/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base_roi_head.py
│   │   │   │   ├── bbox_heads/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── bbox_head.py
│   │   │   │   │   ├── convfc_bbox_head.py
│   │   │   │   │   └── double_bbox_head.py
│   │   │   │   ├── cascade_roi_head.py
│   │   │   │   ├── double_roi_head.py
│   │   │   │   ├── dynamic_roi_head.py
│   │   │   │   ├── grid_roi_head.py
│   │   │   │   ├── htc_roi_head.py
│   │   │   │   ├── mask_heads/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── coarse_mask_head.py
│   │   │   │   │   ├── fcn_mask_head.py
│   │   │   │   │   ├── fused_semantic_head.py
│   │   │   │   │   ├── grid_head.py
│   │   │   │   │   ├── htc_mask_head.py
│   │   │   │   │   ├── mask_point_head.py
│   │   │   │   │   └── maskiou_head.py
│   │   │   │   ├── mask_scoring_roi_head.py
│   │   │   │   ├── pisa_roi_head.py
│   │   │   │   ├── point_rend_roi_head.py
│   │   │   │   ├── roi_extractors/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base_roi_extractor.py
│   │   │   │   │   ├── generic_roi_extractor.py
│   │   │   │   │   └── single_level_roi_extractor.py
│   │   │   │   ├── shared_heads/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── res_layer.py
│   │   │   │   ├── standard_roi_head.py
│   │   │   │   └── test_mixins.py
│   │   │   └── utils/
│   │   │       ├── __init__.py
│   │   │       └── res_layer.py
│   │   ├── ops/
│   │   │   ├── __init__.py
│   │   │   ├── carafe/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── carafe.py
│   │   │   │   ├── grad_check.py
│   │   │   │   ├── setup.py
│   │   │   │   └── src/
│   │   │   │       ├── carafe_ext.cpp
│   │   │   │       ├── carafe_naive_ext.cpp
│   │   │   │       └── cuda/
│   │   │   │           ├── carafe_cuda.cpp
│   │   │   │           ├── carafe_cuda_kernel.cu
│   │   │   │           ├── carafe_naive_cuda.cpp
│   │   │   │           └── carafe_naive_cuda_kernel.cu
│   │   │   ├── chamfer_2d/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── dist_chamfer_2d.py
│   │   │   │   └── src/
│   │   │   │       ├── chamfer_2d.cu
│   │   │   │       └── chamfer_cuda.cpp
│   │   │   ├── context_block.py
│   │   │   ├── conv_ws.py
│   │   │   ├── corner_pool/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── corner_pool.py
│   │   │   │   └── src/
│   │   │   │       └── corner_pool.cpp
│   │   │   ├── dcn/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── deform_conv.py
│   │   │   │   ├── deform_pool.py
│   │   │   │   └── src/
│   │   │   │       ├── cuda/
│   │   │   │       │   ├── deform_conv_cuda.cpp
│   │   │   │       │   ├── deform_conv_cuda_kernel.cu
│   │   │   │       │   ├── deform_pool_cuda.cpp
│   │   │   │       │   └── deform_pool_cuda_kernel.cu
│   │   │   │       ├── deform_conv_ext.cpp
│   │   │   │       └── deform_pool_ext.cpp
│   │   │   ├── generalized_attention.py
│   │   │   ├── masked_conv/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── masked_conv.py
│   │   │   │   └── src/
│   │   │   │       ├── cuda/
│   │   │   │       │   ├── masked_conv2d_cuda.cpp
│   │   │   │       │   └── masked_conv2d_kernel.cu
│   │   │   │       └── masked_conv2d_ext.cpp
│   │   │   ├── merge_cells.py
│   │   │   ├── nms/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── nms_wrapper.py
│   │   │   │   └── src/
│   │   │   │       ├── cpu/
│   │   │   │       │   └── nms_cpu.cpp
│   │   │   │       ├── cuda/
│   │   │   │       │   ├── nms_cuda.cpp
│   │   │   │       │   └── nms_kernel.cu
│   │   │   │       └── nms_ext.cpp
│   │   │   ├── non_local.py
│   │   │   ├── plugin.py
│   │   │   ├── point_sample.py
│   │   │   ├── roi_align/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── gradcheck.py
│   │   │   │   ├── roi_align.py
│   │   │   │   └── src/
│   │   │   │       ├── cpu/
│   │   │   │       │   └── roi_align_v2.cpp
│   │   │   │       ├── cuda/
│   │   │   │       │   ├── roi_align_kernel.cu
│   │   │   │       │   └── roi_align_kernel_v2.cu
│   │   │   │       └── roi_align_ext.cpp
│   │   │   ├── roi_pool/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── gradcheck.py
│   │   │   │   ├── roi_pool.py
│   │   │   │   └── src/
│   │   │   │       ├── cuda/
│   │   │   │       │   └── roi_pool_kernel.cu
│   │   │   │       └── roi_pool_ext.cpp
│   │   │   ├── saconv.py
│   │   │   ├── sigmoid_focal_loss/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── sigmoid_focal_loss.py
│   │   │   │   └── src/
│   │   │   │       ├── cuda/
│   │   │   │       │   └── sigmoid_focal_loss_cuda.cu
│   │   │   │       └── sigmoid_focal_loss_ext.cpp
│   │   │   ├── utils/
│   │   │   │   ├── __init__.py
│   │   │   │   └── src/
│   │   │   │       └── compiling_info.cpp
│   │   │   └── wrappers.py
│   │   └── utils/
│   │       ├── __init__.py
│   │       ├── collect_env.py
│   │       ├── contextmanagers.py
│   │       ├── logger.py
│   │       ├── profiling.py
│   │       └── util_mixins.py
│   ├── pytest.ini
│   ├── requirements/
│   │   ├── build.txt
│   │   ├── docs.txt
│   │   ├── optional.txt
│   │   ├── readthedocs.txt
│   │   ├── runtime.txt
│   │   └── tests.txt
│   ├── requirements.txt
│   ├── setup.py
│   ├── tests/
│   │   ├── async_benchmark.py
│   │   ├── test_anchor.py
│   │   ├── test_assigner.py
│   │   ├── test_async.py
│   │   ├── test_backbone.py
│   │   ├── test_config.py
│   │   ├── test_dataset.py
│   │   ├── test_forward.py
│   │   ├── test_fp16.py
│   │   ├── test_heads.py
│   │   ├── test_losses.py
│   │   ├── test_masks.py
│   │   ├── test_necks.py
│   │   ├── test_ops/
│   │   │   ├── test_corner_pool.py
│   │   │   ├── test_merge_cells.py
│   │   │   ├── test_nms.py
│   │   │   ├── test_soft_nms.py
│   │   │   └── test_wrappers.py
│   │   ├── test_pipelines/
│   │   │   ├── test_formatting.py
│   │   │   ├── test_loading.py
│   │   │   ├── test_models_aug_test.py
│   │   │   └── test_transform.py
│   │   ├── test_pisa_heads.py
│   │   ├── test_roi_extractor.py
│   │   └── test_sampler.py
│   ├── tools/
│   │   ├── analyze_logs.py
│   │   ├── benchmark.py
│   │   ├── browse_dataset.py
│   │   ├── coco_error_analysis.py
│   │   ├── convert_datasets/
│   │   │   ├── cityscapes.py
│   │   │   └── pascal_voc.py
│   │   ├── detectron2pytorch.py
│   │   ├── dist_test.sh
│   │   ├── dist_train.sh
│   │   ├── fuse_conv_bn.py
│   │   ├── gen_coco_lsvr.py
│   │   ├── get_flops.py
│   │   ├── print_config.py
│   │   ├── publish_model.py
│   │   ├── pytorch2onnx.py
│   │   ├── regnet2mmdet.py
│   │   ├── robustness_eval.py
│   │   ├── slurm_test.sh
│   │   ├── slurm_train.sh
│   │   ├── test.py
│   │   ├── test_robustness.py
│   │   ├── train.py
│   │   └── upgrade_model_version.py
│   └── visualization/
│       └── 000.txt
└── logs/
    └── 000.txt

================================================
FILE CONTENTS
================================================

================================================
FILE: README.md
================================================
### The trained models are temporarily unavailable, but you can train the code using reasonable computational resource.

# [Location-Sensitive Visual Recognition with Cross-IOU Loss](https://arxiv.org/abs/2104.04899)

by [Kaiwen Duan](https://scholar.google.com/citations?hl=zh-CN&user=TFHRaZUAAAAJ&scilu=&scisig=AMD79ooAAAAAXLv9_7ddy26i4c6z5n9agk05m97faUdN&gmla=AJsN-F78W-h98Pb2H78j6lTKbjdn0fklhe2X_8CCPqRU2fC4KJEIbllhD2c5F0irMR3zDiehKt_SH26N2MHI1HlUMw6qRba9HMbiP3vnQfJqD82FrMAPdlU&sciund=10706678259143520926&gmla=AJsN-F5cOpNUdnI6YrZ9joRa6JE2nP6wFKU1GKVkNIfCmmgjk431Lg2BYCS6wn5WWZxdnzBjLfaUwdUJtvPXo53vfoOQoTGP5fHh2X0cCssVtXm8BI4PaM3_oQvKYtCx7o1wivIt1l49sDK6AZPvHLMxxPbC4GbZ1Q&sciund=10445692451499027349), [Lingxi Xie](http://lingxixie.com/Home.html), [Honggang Qi](http://people.ucas.ac.cn/~hgqi), [Song Bai](http://songbai.site/), [Qingming Huang](https://scholar.google.com/citations?user=J1vMnRgAAAAJ&hl=zh-CN) and [Qi Tian](https://scholar.google.com/citations?user=61b6eYkAAAAJ&hl=zh-CN)

**The code to train and evaluate the proposed LSNet is available here. For more technical details, please refer to our [arXiv paper](https://arxiv.org/abs/2104.04899).**

<div align=center>
<img src=https://github.com/Duankaiwen/LSNet/blob/main/code/resources/lsvr.png width = "600" height = "250" alt="" align=center />
  
*The location-sensitive visual recognition tasks, including object detection, instance segmentation, and human pose estimation, can be formulated into localizing an anchor point (in red) and a set of landmarks (in green). Our work aims to offer a unified framework for these tasks.*
</div>

## Abstract

  Object detection, instance segmentation, and pose estimation are popular visual recognition tasks which require localizing the object by internal or boundary landmarks. This paper summarizes these tasks as location-sensitive visual recognition and proposes a unified solution named location-sensitive network (LSNet). Based on a deep neural network as the backbone, LSNet predicts an anchor point and a set of landmarks which together define the shape of the target object. The key to optimizing the LSNet lies in the ability of fitting various scales, for which we design a novel loss function named cross-IOU loss that computes the cross-IOU of each anchor-landmark pair to approximate the global IOU between the prediction and groundtruth. The flexibly located and accurately predicted landmarks also enable LSNet to incorporate richer contextual information for visual recognition. Evaluated on the MSCOCO dataset, LSNet set the new state-of-the-art accuracy for anchor-free object detection (a 53.5% box AP) and instance segmentation (a 40.2% mask AP), and shows promising performance in detecting multi-scale human poses. 

**If you encounter any problems in using our code, please contact Kaiwen Duan: kaiwenduan@outlook.com**

## Bbox AP(%) on COCO test-dev
|Method          |  Backbone       | epoch | MS<sub>train<sub> |  AP  | AP<sub>50</sub> | AP<sub>75</sub> | AP<sub>S</sub> | AP<sub>M</sub> | AP<sub>L</sub> |
| :------------- | :-------:       | :---: | :---------------: | :--: | :-------------: | :-------------: | :------------: | :------------: | :------------: | 
|                |   
| *Anchor-based:*|   
|Libra R-CNN     | X-101-64x4d     | 12  |      N            | 43.0 |     64.0        |       47.0      |      25.3      |      45.6      |      54.6      |
| AB+FSAF*       | X-101-64x4d     | 18  |      Y            | 44.6 |     65.2        |       48.6      |      29.7      |      47.1      |      54.6      |
| FreeAnchor*    | X-101-32x8d     | 24  |      Y            | 47.3 |     66.3        |       51.5      |      30.6      |      50.4      |      59.0      |
| GFLV1*         | X-101-32x8d     | 24  |      Y            | 48.2 |     67.4        |       52.6      |      29.2      |      51.7      |      60.2      |
| ATSS*          | X-101-64x4d-DCN | 24  |      Y            | 50.7 |     68.9        |       56.3      |      33.2      |      52.9      |      62.4      |
| PAA*           | X-101-64x4d-DCN | 24  |      Y            | 51.4 |     69.7        |       57.0      |      34.0      |      53.8      |      64.0      |
| GFLV2*         | R2-101-DCN      | 24  |      Y            | 53.3 |     70.9        |       59.2      |      35.7      |      56.1      |      65.6      |
| YOLOv4-P7*     | CSP-P7          | 450 |      Y            | 56.0 |     73.3        |       61.2      |      38.9      |      60.0      |      68.6      |
|                |   
| *Anchor-free:* |
| ExtremeNet*    | HG-104          | 200 |      Y            | 43.2 |     59.8        |       46.4      |      24.1       |     46.0      |      57.1      | 
| RepPointsV1*   | R-101-DCN       | 24  |      Y            | 46.5 |     67.4        |       50.9      |      30.3       |     49.7      |      57.1      |
| SAPD           | X-101-64x4d-DCN | 24  |      Y            | 47.4 |     67.4        |       51.1      |      28.1       |     50.3      |      61.5      |
| CornerNet*     | HG-104          | 200 |      Y            | 42.1 |     57.8        |       45.3      |      20.8       |     44.8      |      56.7      |
| DETR           | R-101           | 500 |      Y            | 44.9 |     64.7        |       47.7      |      23.7       |     49.5      |      62.3      |
| CenterNet*     | HG-104          | 190 |      Y            | 47.0 |     64.5        |       50.7      |      28.9       |     49.9      |      58.9      |
| CPNDet*        | HG-104          | 100 |      Y            | 49.2 |     67.4        |       53.7      |      31.0       |     51.9      |      62.4      |
| BorderDet*     | X-101-64x4d-DCN | 24  |      Y            | 50.3 |     68.9        |       55.2      |      32.8       |     52.8      |      62.3      |
| FCOS-BiFPN     | X-101-32x8-DCN  | 24  |      Y            | 50.4 |     68.9        |       55.0      |      33.2       |     53.0      |      62.7      |
| RepPointsV2*   | X-101-64x4d-DCN | 24  |      Y            | 52.1 |     70.1        |       57.5      |      34.5       |     54.6      |      63.6      |
|                |
| LSNet          | R-50            | 24  |      Y            | 44.8 |     64.1        |       48.8      |      26.6       |     47.7      |      55.7      |
| LSNet          | X-101-64x4d     | 24  |      Y            | 48.2 |     67.6        |       52.6      |      29.6       |     51.3      |      60.5      |
| LSNet          | X-101-64x4d-DCN | 24  |      Y            | 49.6 |     69.0        |       54.1      |      30.3       |     52.8      |      62.8      |
| LSNet-CPV      | X-101-64x4d-DCN | 24  |      Y            | 50.4 |     69.4        |       54.5      |      31.0       |     53.3      |      64.0      |
| LSNet-CPV      | R2-101-DCN      | 24  |      Y            | 51.1 |     70.3        |       55.2      |      31.2       |     54.3      |      65.0      |
| LSNet-CPV*     | R2-101-DCN      | 24  |      Y            | 53.5 |     71.1        |       59.2      |      35.2       |     56.4      |      65.8      |

*A comparison between LSNet and the sate-of-the-art methods in object detection on the MS-COCO test-dev set. LSNet surpasses all competitors in the anchor-free group. The abbreviations are: ‘R’ – ResNet, ‘X’ – ResNeXt, ‘HG’ – Hourglass network, ‘R2’ – Res2Net, ‘CPV’ – corner point verification, ‘MStrain’ – multi-scale training, * – multi-scale testing.*
             
## Segm AP(%) on COCO test-dev
|Method            |  Backbone       | epoch |  AP  | AP<sub>50</sub> | AP<sub>75</sub> | AP<sub>S</sub> | AP<sub>M</sub> | AP<sub>L</sub> |
| :-------------   | :-------:       | :---: | :--: | :-------------: | :-------------: | :------------: | :------------: | :------------: | 
|                  |   
| *Pixel-based:*   |   
| YOLACT           | R-101           | 48    | 31.2 |      50.6       |     32.8        |       12.1      |      33.3      |      47.1     |
| TensorMask       | R-101           | 72    | 37.1 |      59.3       |     39.4        |       17.1      |      39.1      |      51.6     |
| Mask R-CNN       | X-101-32x4d     | 12    | 37.1 |      60.0       |     39.4        |       16.9      |      39.9      |      53.5     |
| HTC              | X-101-64x4d     | 20    | 41.2 |      63.9       |     44.7        |       22.8      |      43.9      |      54.6     |
| DetectoRS*       | X-101-64x4d     | 40    | 48.5 |      72.0       |     53.3        |       31.6      |      50.9      |      61.5     |
|                  |   
| *Contour-based:* |
| ExtremeNet       | HG-104          | 100   | 18.9 |      44.5       |      13.7       |        10.4     |      20.4      |      28.3     |
| DeepSnake        | DLA-34          | 120   | 30.3 |       -         |       -         |         -       |       -        |        -      |
| PolarMask        | X-101-64x4d-DCN | 24    | 36.2 |      59.4       |      37.7       |        17.8     |      37.7      |      51.5     |
|                  |
| LSNet            | X-101-64x4d-DCN | 30    | 37.6 |      64.0       |      38.3       |        22.1     |      39.9      |      49.1     |
| LSNet            | R2-101-DCN      | 30    | 38.0 |      64.6       |      39.0       |        22.4     |      40.6      |      49.2     |
| LSNet*           | X-101-64x4d-DCN | 30    | 39.7 |      65.5       |      41.3       |        25.5     |      41.3      |      50.4     |
| LSNet*           | R2-101-DCN      | 30    | 40.2 |      66.2       |      42.1       |        25.8     |      42.2      |      51.0     |

*Comparison of LSNet to the sate-of-the-art methods in instance segmentation task on the COCO test-dev set. Our LSNet achieves the state-of-the-art accuracy for contour-based instance segmentation. ‘R’ - ResNet, ‘X’ - ResNeXt, ‘HG’ - Hourglass, ‘R2’ - Res2Net, * -  multi-scale testing.*

## Keypoints AP(%) on COCO test-dev
|Method               |  Backbone       | epoch |  AP  | AP<sub>50</sub> | AP<sub>75</sub> | AP<sub>M</sub> | AP<sub>L</sub> |
| :-------------      | :-------:       | :---: | :--: | :-------------: | :-------------: | :------------: | :------------: | 
|                     |   
| *Heatmap-based:*    |   
| CenterNet-jd        |  DLA-34         | 320   | 57.9 |      84.7       |      63.1       |       52.5     |      67.4      |
| OpenPose            |  VGG-19         | -     | 61.8 |      84.9       |      67.5       |       58.0     |      70.4      |
| Pose-AE             |  HG             | 300   | 62.8 |      84.6       |      69.2       |       57.5     |      70.6      |
| CenterNet-jd        |  HG104          | 150   | 63.0 |      86.8       |      69.6       |       58.9     |      70.4      |
| Mask R-CNN          |  R-50           | 28    | 63.1 |      87.3       |      68.7       |       57.8     |      71.4      |
| PersonLab           |  R-152          | >1000 | 66.5 |      85.5       |      71.3       |       62.3     |      70.0      |
| HRNet               |  HRNet-W32      | 210   | 74.9 |      92.5       |      82.8       |       71.3     |      80.9      |
|                     |   
| *Regression-based:* |
| CenterNet-reg       |  DLA-34         | 320   | 51.7 |      81.4       |       55.2      |       44.6     |      63.0      |
| CenterNet-reg       |  HG-104         | 150   | 55.0 |      83.5       |       59.7      |       49.4     |      64.0      |
|                     |
| LSNet w/ obj-box    |  X-101-64x4d-DCN| 60    | 55.7 |      81.3       |       61.0      |       52.9     |      60.5      |
| LSNet w/ kps-box    |  X-101-64x4d-DCN| 20    | 59.0 |      83.6       |       65.2      |       53.3     |      67.9      |

*Comparison of LSNet to the sate-of-the-art methods in pose estimation task on the COCO test-dev set. LSNet
predict the keypoints by regression. ‘obj-box’ and ‘kps-box’ denote the object bounding boxes and the keypoint-boxes,
respectively. For LSNet w/ kps-box, we fine-tune the model from the LSNet w/ kps-box for another 20 epochs.*

## Visualization

<div align=center>
<img src=https://github.com/Duankaiwen/LSNet/blob/main/code/resources/dect-segm-pose.png width = "1000" height = "250" alt="" align=center />
  
*Some location-sensitive visual recognition results on the MS-COCO validation set.*
</div>


<div align=center>
<img src=https://github.com/Duankaiwen/LSNet/blob/main/code/resources/pose1.png width = "400" height = "350" alt="" align=center />
  
*We compared with the CenterNet to show that our LSNet w/ ‘obj-box’ tends to predict more human pose of small scales, which are not annotated on the dataset. Only pose results with scores higher than 0:3 are shown for both methods.*
</div>

<div align=center>
<img src=https://github.com/Duankaiwen/LSNet/blob/main/code/resources/pose2.png width = "500" height = "800" alt="" align=center />
  
*Left: LSNet uses the object bounding boxes to assign training samples. Right: LSNet uses the keypoint-boxes to
assign training samples. Although LSNet with keypoint-boxes enjoys higher AP score, its ability of perceiving multi-scale
human instances is weakened.*
</div>

## Preparation
The master branch works with PyTorch 1.5.0

The dataset directory should be like this:
```plain
├── data
│   ├── coco
│   │   ├── annotations
│   │   ├── images
            ├── train2017
            ├── val2017
            ├── test2017
```

Generate extreme point annotation from segmentation:
- ```cd code/tools```
- ```python gen_coco_lsvr.py```
- ```cd ..```

## Installation

##### 1. Installing cocoapi 
- ```cd cocoapi/pycocotools```
- ```python setup.py develop```
- ```cd ../..```

##### 2. Installing mmcv 
- ```cd mmcv```
- ```pip install -e.```
- ```cd ..```

##### 3. Installing mmdet 
- ```python setup.py develop```

## Training and Evaluation
Our LSNet is based on [mmdetection](https://github.com/open-mmlab/mmdetection). Please check [with existing dataset](https://github.com/open-mmlab/mmdetection/blob/master/docs/1_exist_data_model.md) for Training and Evaluation.







================================================
FILE: checkpoints/000.txt
================================================


================================================
FILE: code/LICENSE
================================================
    MIT License

    Copyright (c) Microsoft Corporation. All rights reserved.

    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the "Software"), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all
    copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    SOFTWARE


================================================
FILE: code/ThirdPartyNotices.txt
================================================
************************************************************************

THIRD-PARTY SOFTWARE NOTICES AND INFORMATION

mmdetection (https://github.com/open-mmlab/mmdetection)

Copyright 2018-2019 Open-MMLab. All rights reserved.

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2018-2019 Open-MMLab.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

RepPointsV2 (https://github.com/Scalsol/RepPointsV2)

MIT License

Copyright (c) Microsoft Corporation. All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE

================================================
FILE: code/cocoapi/.github/workflows/build.yml
================================================
# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions

name: build

on: [push, pull_request]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.6, 3.7, 3.8]

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v1
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install linting dependencies
      run: |
        python -m pip install --upgrade pip
        pip install flake8 isort==4.3.21 yapf
    - name: Lint with flake8
      run: flake8 --max-complexity 20 .
    - name: Lint with isort
      run: isort -rc --check-only --diff pycocotools/ lvis/
    - name: Format with yapf
      run: yapf -r -d pycocotools/ lvis/
    - name: Install python dependencies
      run: pip install numpy
    - name: Build and install pycocotools
      run: cd pycocotools && rm -rf *.eggs-info && pip install .
    - name: Build and install lvis
      run: cd lvis && rm -rf *.eggs-info && pip install .


================================================
FILE: code/cocoapi/.github/workflows/deploy.yml
================================================
name: deploy

on: push

jobs:
  build-n-publish:
    runs-on: ubuntu-latest
    if: startsWith(github.event.ref, 'refs/tags')
    steps:
      - uses: actions/checkout@v2
      - name: Set up Python 3.7
        uses: actions/setup-python@v2
        with:
          python-version: 3.7
      - name: Build mmpycocotools
        run: |
          pip install -r lvis/requirements.txt
          cd pycocotools
          python setup.py sdist
      - name: Build mmvlis
        run: |
          pip install wheel
          cd lvis
          python setup.py sdist bdist_wheel
      - name: Publish distribution to PyPI
        run: |
          pip install twine
          twine upload pycocotools/dist/* -u __token__ -p ${{ secrets.pypi_password }}
          twine upload lvis/dist/* -u __token__ -p ${{ secrets.pypi_password }}


================================================
FILE: code/cocoapi/.gitignore
================================================
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
.pybuilder/
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
#   For a library or package, you might want to ignore these files since the code is
#   intended to run in multiple environments; otherwise, check them in:
# .python-version

# pipenv
#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
#   However, in case of collaboration, if having platform-specific dependencies or dependencies
#   having no cross-platform support, pipenv may install dependencies that don't work, or not
#   install all needed dependencies.
#Pipfile.lock

# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

images/
annotations/
results/
external/
.vscode
.idea
.DS_Store

pycocotools/pycocotools/__init__.pyc
pycocotools/pycocotools/_mask.c
pycocotools/pycocotools/_mask.so
pycocotools/pycocotools/coco.pyc
pycocotools/pycocotools/cocoeval.pyc
pycocotools/pycocotools/mask.pyc


================================================
FILE: code/cocoapi/.isort.cfg
================================================
[settings]
known_third_party = cv2,matplotlib,numpy,setuptools


================================================
FILE: code/cocoapi/.pre-commit-config.yaml
================================================
repos:
  - repo: https://gitlab.com/pycqa/flake8.git
    rev: 3.8.0
    hooks:
      - id: flake8
  - repo: https://github.com/asottile/seed-isort-config
    rev: v2.1.0
    hooks:
      - id: seed-isort-config
  - repo: https://github.com/timothycrosley/isort
    rev: 4.3.21
    hooks:
      - id: isort
  - repo: https://github.com/pre-commit/mirrors-yapf
    rev: v0.29.0
    hooks:
      - id: yapf
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v2.5.0
    hooks:
      - id: trailing-whitespace
      - id: check-yaml
      - id: end-of-file-fixer
      - id: requirements-txt-fixer
      - id: double-quote-string-fixer
      - id: check-merge-conflict
      - id: fix-encoding-pragma
        args: ["--remove"]


================================================
FILE: code/cocoapi/MANIFEST.in
================================================
include pycocotools/pycocotools/*.pyx
include lvis/requirements.txt


================================================
FILE: code/cocoapi/README.md
================================================
# OpenMMLab cocoapi

In this repo, we merged COCO and LVIS API into one repo.

For bug fixes and better compatability with OpenMMLab projects, we fork from original
repo, which receive few updates is likely to cause problems with some latest dependencies like numpy.
We remove some legacy codes and unify the api of COCO and LVIS since they share similar functions.

Notes:

* We add snack case aliases for functions of [COCO](pycocotools/coco.py).
* The the package version requirement of `lvis-api` is relaxed.
* The major version of `cocoapi` and `lvis-api` in this repo is offseted by 10.
  Namely, `cocoapi@2.0.0->cocoapi@12.0.0`, `lvis-api@0.5.2->lvis-api@10.5.2`.

## Installation

Currently, you could install by run

```shell
# Install cocoapi
pip install "git+https://github.com/open-mmlab/cocoapi.git#subdirectory=pycocotools"
# Install lvis-api
pip install "git+https://github.com/open-mmlab/cocoapi.git#subdirectory=lvis"
```

## Reference

* [cocoapi](https://github.com/cocodataset/cocoapi) of [COCO dataset](http://cocodataset.org/).
* [lvis-api](https://github.com/lvis-dataset/lvis-api) of [LVIS dataset](http://lvisdataset.org).


================================================
FILE: code/cocoapi/license.txt
================================================
Copyright (c) 2014, Piotr Dollar and Tsung-Yi Lin
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of the FreeBSD Project.


================================================
FILE: code/cocoapi/lvis/lvis/__init__.py
================================================
from .eval import LVISEval
from .lvis import LVIS
from .results import LVISResults
from .vis import LVISVis

__all__ = ['LVIS', 'LVISResults', 'LVISEval', 'LVISVis']
__version__ = '10.5.3'


================================================
FILE: code/cocoapi/lvis/lvis/colormap.py
================================================
"""An awesome colormap for really neat visualizations. Taken from detectron."""

import numpy as np


def colormap(rgb=False):
    color_list = np.array([
        0.000,
        0.447,
        0.741,
        0.850,
        0.325,
        0.098,
        0.929,
        0.694,
        0.125,
        0.494,
        0.184,
        0.556,
        0.466,
        0.674,
        0.188,
        0.301,
        0.745,
        0.933,
        0.635,
        0.078,
        0.184,
        0.300,
        0.300,
        0.300,
        0.600,
        0.600,
        0.600,
        1.000,
        0.000,
        0.000,
        1.000,
        0.500,
        0.000,
        0.749,
        0.749,
        0.000,
        0.000,
        1.000,
        0.000,
        0.000,
        0.000,
        1.000,
        0.667,
        0.000,
        1.000,
        0.333,
        0.333,
        0.000,
        0.333,
        0.667,
        0.000,
        0.333,
        1.000,
        0.000,
        0.667,
        0.333,
        0.000,
        0.667,
        0.667,
        0.000,
        0.667,
        1.000,
        0.000,
        1.000,
        0.333,
        0.000,
        1.000,
        0.667,
        0.000,
        1.000,
        1.000,
        0.000,
        0.000,
        0.333,
        0.500,
        0.000,
        0.667,
        0.500,
        0.000,
        1.000,
        0.500,
        0.333,
        0.000,
        0.500,
        0.333,
        0.333,
        0.500,
        0.333,
        0.667,
        0.500,
        0.333,
        1.000,
        0.500,
        0.667,
        0.000,
        0.500,
        0.667,
        0.333,
        0.500,
        0.667,
        0.667,
        0.500,
        0.667,
        1.000,
        0.500,
        1.000,
        0.000,
        0.500,
        1.000,
        0.333,
        0.500,
        1.000,
        0.667,
        0.500,
        1.000,
        1.000,
        0.500,
        0.000,
        0.333,
        1.000,
        0.000,
        0.667,
        1.000,
        0.000,
        1.000,
        1.000,
        0.333,
        0.000,
        1.000,
        0.333,
        0.333,
        1.000,
        0.333,
        0.667,
        1.000,
        0.333,
        1.000,
        1.000,
        0.667,
        0.000,
        1.000,
        0.667,
        0.333,
        1.000,
        0.667,
        0.667,
        1.000,
        0.667,
        1.000,
        1.000,
        1.000,
        0.000,
        1.000,
        1.000,
        0.333,
        1.000,
        1.000,
        0.667,
        1.000,
        0.167,
        0.000,
        0.000,
        0.333,
        0.000,
        0.000,
        0.500,
        0.000,
        0.000,
        0.667,
        0.000,
        0.000,
        0.833,
        0.000,
        0.000,
        1.000,
        0.000,
        0.000,
        0.000,
        0.167,
        0.000,
        0.000,
        0.333,
        0.000,
        0.000,
        0.500,
        0.000,
        0.000,
        0.667,
        0.000,
        0.000,
        0.833,
        0.000,
        0.000,
        1.000,
        0.000,
        0.000,
        0.000,
        0.167,
        0.000,
        0.000,
        0.333,
        0.000,
        0.000,
        0.500,
        0.000,
        0.000,
        0.667,
        0.000,
        0.000,
        0.833,
        0.000,
        0.000,
        1.000,
        0.000,
        0.000,
        0.000,
        0.143,
        0.143,
        0.143,
        0.286,
        0.286,
        0.286,
        0.429,
        0.429,
        0.429,
        0.571,
        0.571,
        0.571,
        0.714,
        0.714,
        0.714,
        0.857,
        0.857,
        0.857,
        1.000,
        1.000,
        1.000,
    ]).astype(np.float32)
    color_list = color_list.reshape((-1, 3)) * 255
    if not rgb:
        color_list = color_list[:, ::-1]
    return color_list


================================================
FILE: code/cocoapi/lvis/lvis/eval.py
================================================
import datetime
import logging
from collections import OrderedDict, defaultdict

import numpy as np

import pycocotools.mask as mask_utils

from .lvis import LVIS
from .results import LVISResults


class LVISEval:
    def __init__(self, lvis_gt, lvis_dt, iou_type='segm'):
        """Constructor for LVISEval.
        Args:
            lvis_gt (LVIS class instance, or str containing path of annotation
                file)
            lvis_dt (LVISResult class instance, or str containing path of
                result file, or list of dict)
            iou_type (str): segm or bbox evaluation
        """
        self.logger = logging.getLogger(__name__)

        if iou_type not in ['bbox', 'segm']:
            raise ValueError('iou_type: {} is not supported.'.format(iou_type))

        if isinstance(lvis_gt, LVIS):
            self.lvis_gt = lvis_gt
        elif isinstance(lvis_gt, str):
            self.lvis_gt = LVIS(lvis_gt)
        else:
            raise TypeError('Unsupported type {} of lvis_gt.'.format(lvis_gt))

        if isinstance(lvis_dt, LVISResults):
            self.lvis_dt = lvis_dt
        elif isinstance(lvis_dt, (str, list)):
            self.lvis_dt = LVISResults(self.lvis_gt, lvis_dt)
        else:
            raise TypeError('Unsupported type {} of lvis_dt.'.format(lvis_dt))

        # per-image per-category evaluation results
        self.eval_imgs = defaultdict(list)
        self.eval = {}  # accumulated evaluation results
        self._gts = defaultdict(list)  # gt for evaluation
        self._dts = defaultdict(list)  # dt for evaluation
        self.params = Params(iou_type=iou_type)  # parameters
        self.results = OrderedDict()
        self.ious = {}  # ious between all gts and dts

        self.params.img_ids = sorted(self.lvis_gt.get_img_ids())
        self.params.cat_ids = sorted(self.lvis_gt.get_cat_ids())

    def _to_mask(self, anns, lvis):
        for ann in anns:
            rle = lvis.ann_to_rle(ann)
            ann['segmentation'] = rle

    def _prepare(self):
        """Prepare self._gts and self._dts for evaluation based on params."""

        cat_ids = self.params.cat_ids if self.params.cat_ids else None

        gts = self.lvis_gt.load_anns(
            self.lvis_gt.get_ann_ids(img_ids=self.params.img_ids,
                                     cat_ids=cat_ids))
        dts = self.lvis_dt.load_anns(
            self.lvis_dt.get_ann_ids(img_ids=self.params.img_ids,
                                     cat_ids=cat_ids))
        # convert ground truth to mask if iou_type == 'segm'
        if self.params.iou_type == 'segm':
            self._to_mask(gts, self.lvis_gt)
            self._to_mask(dts, self.lvis_dt)

        # set ignore flag
        for gt in gts:
            if 'ignore' not in gt:
                gt['ignore'] = 0

        for gt in gts:
            self._gts[gt['image_id'], gt['category_id']].append(gt)

        # For federated dataset evaluation we will filter out all dt for an
        # image which belong to categories not present in gt and not present in
        # the negative list for an image. In other words detector is not
        # penalized for categories about which we don't have gt information
        # about their presence or absence in an image.
        img_data = self.lvis_gt.load_imgs(ids=self.params.img_ids)
        # per image map of categories not present in image
        img_nl = {d['id']: d['neg_category_ids'] for d in img_data}
        # per image list of categories present in image
        img_pl = defaultdict(set)
        for ann in gts:
            img_pl[ann['image_id']].add(ann['category_id'])
        # per image map of categoires which have missing gt. For these
        # categories we don't penalize the detector for flase positives.
        self.img_nel = {
            d['id']: d['not_exhaustive_category_ids']
            for d in img_data
        }

        for dt in dts:
            img_id, cat_id = dt['image_id'], dt['category_id']
            if cat_id not in img_nl[img_id] and cat_id not in img_pl[img_id]:
                continue
            self._dts[img_id, cat_id].append(dt)

        self.freq_groups = self._prepare_freq_group()

    def _prepare_freq_group(self):
        freq_groups = [[] for _ in self.params.img_count_lbl]
        cat_data = self.lvis_gt.load_cats(self.params.cat_ids)
        for idx, _cat_data in enumerate(cat_data):
            frequency = _cat_data['frequency']
            freq_groups[self.params.img_count_lbl.index(frequency)].append(idx)
        return freq_groups

    def evaluate(self):
        """
        Run per image evaluation on given images and store results
        (a list of dict) in self.eval_imgs.
        """
        self.logger.info('Running per image evaluation.')
        self.logger.info('Evaluate annotation type *{}*'.format(
            self.params.iou_type))

        self.params.img_ids = list(np.unique(self.params.img_ids))

        if self.params.use_cats:
            cat_ids = self.params.cat_ids
        else:
            cat_ids = [-1]

        self._prepare()

        self.ious = {(img_id, cat_id): self.compute_iou(img_id, cat_id)
                     for img_id in self.params.img_ids for cat_id in cat_ids}

        # loop through images, area range, max detection number
        self.eval_imgs = [
            self.evaluate_img(img_id, cat_id, area_rng) for cat_id in cat_ids
            for area_rng in self.params.area_rng
            for img_id in self.params.img_ids
        ]

    def _get_gt_dt(self, img_id, cat_id):
        """Create gt, dt which are list of anns/dets. If use_cats is true
        only anns/dets corresponding to tuple (img_id, cat_id) will be
        used. Else, all anns/dets in image are used and cat_id is not used.
        """
        if self.params.use_cats:
            gt = self._gts[img_id, cat_id]
            dt = self._dts[img_id, cat_id]
        else:
            gt = [
                _ann for _cat_id in self.params.cat_ids
                for _ann in self._gts[img_id, cat_id]
            ]
            dt = [
                _ann for _cat_id in self.params.cat_ids
                for _ann in self._dts[img_id, cat_id]
            ]
        return gt, dt

    def compute_iou(self, img_id, cat_id):
        gt, dt = self._get_gt_dt(img_id, cat_id)

        if len(gt) == 0 and len(dt) == 0:
            return []

        # Sort detections in decreasing order of score.
        idx = np.argsort([-d['score'] for d in dt], kind='mergesort')
        dt = [dt[i] for i in idx]

        iscrowd = [int(False)] * len(gt)

        if self.params.iou_type == 'segm':
            ann_type = 'segmentation'
        elif self.params.iou_type == 'bbox':
            ann_type = 'bbox'
        else:
            raise ValueError('Unknown iou_type for iou computation.')
        gt = [g[ann_type] for g in gt]
        dt = [d[ann_type] for d in dt]

        # compute iou between each dt and gt region
        # will return array of shape len(dt), len(gt)
        ious = mask_utils.iou(dt, gt, iscrowd)
        return ious

    def evaluate_img(self, img_id, cat_id, area_rng):
        """Perform evaluation for single category and image."""
        gt, dt = self._get_gt_dt(img_id, cat_id)

        if len(gt) == 0 and len(dt) == 0:
            return None

        # Add another filed _ignore to only consider anns based on area range.
        for g in gt:
            if g['ignore'] or (g['area'] < area_rng[0]
                               or g['area'] > area_rng[1]):
                g['_ignore'] = 1
            else:
                g['_ignore'] = 0

        # Sort gt ignore last
        gt_idx = np.argsort([g['_ignore'] for g in gt], kind='mergesort')
        gt = [gt[i] for i in gt_idx]

        # Sort dt highest score first
        dt_idx = np.argsort([-d['score'] for d in dt], kind='mergesort')
        dt = [dt[i] for i in dt_idx]

        # load computed ious
        ious = (self.ious[img_id, cat_id][:, gt_idx]
                if len(self.ious[img_id, cat_id]) > 0 else self.ious[img_id,
                                                                     cat_id])

        num_thrs = len(self.params.iou_thrs)
        num_gt = len(gt)
        num_dt = len(dt)

        # Array to store the "id" of the matched dt/gt
        gt_m = np.zeros((num_thrs, num_gt))
        dt_m = np.zeros((num_thrs, num_dt))

        gt_ig = np.array([g['_ignore'] for g in gt])
        dt_ig = np.zeros((num_thrs, num_dt))

        for iou_thr_idx, iou_thr in enumerate(self.params.iou_thrs):
            if len(ious) == 0:
                break

            for dt_idx, _dt in enumerate(dt):
                iou = min([iou_thr, 1 - 1e-10])
                # information about best match so far (m=-1 -> unmatched)
                # store the gt_idx which matched for _dt
                m = -1
                for gt_idx, _ in enumerate(gt):
                    # if this gt already matched continue
                    if gt_m[iou_thr_idx, gt_idx] > 0:
                        continue
                    # if _dt matched to reg gt, and on ignore gt, stop
                    if m > -1 and gt_ig[m] == 0 and gt_ig[gt_idx] == 1:
                        break
                    # continue to next gt unless better match made
                    if ious[dt_idx, gt_idx] < iou:
                        continue
                    # if match successful and best so far, store appropriately
                    iou = ious[dt_idx, gt_idx]
                    m = gt_idx

                # No match found for _dt, go to next _dt
                if m == -1:
                    continue

                # if gt to ignore for some reason update dt_ig.
                # Should not be used in evaluation.
                dt_ig[iou_thr_idx, dt_idx] = gt_ig[m]
                # _dt match found, update gt_m, and dt_m with "id"
                dt_m[iou_thr_idx, dt_idx] = gt[m]['id']
                gt_m[iou_thr_idx, m] = _dt['id']

        # For LVIS we will ignore any unmatched detection if that category was
        # not exhaustively annotated in gt.
        dt_ig_mask = [
            d['area'] < area_rng[0] or d['area'] > area_rng[1]
            or d['category_id'] in self.img_nel[d['image_id']] for d in dt
        ]
        dt_ig_mask = np.array(dt_ig_mask).reshape((1, num_dt))  # 1 X num_dt
        dt_ig_mask = np.repeat(dt_ig_mask, num_thrs, 0)  # num_thrs X num_dt
        # Based on dt_ig_mask ignore any unmatched detection by updating dt_ig
        dt_ig = np.logical_or(dt_ig, np.logical_and(dt_m == 0, dt_ig_mask))
        # store results for given image and category
        return {
            'image_id': img_id,
            'category_id': cat_id,
            'area_rng': area_rng,
            'dt_ids': [d['id'] for d in dt],
            'gt_ids': [g['id'] for g in gt],
            'dt_matches': dt_m,
            'gt_matches': gt_m,
            'dt_scores': [d['score'] for d in dt],
            'gt_ignore': gt_ig,
            'dt_ignore': dt_ig,
        }

    def accumulate(self):
        """Accumulate per image evaluation results and store the result in
        self.eval.
        """
        self.logger.info('Accumulating evaluation results.')

        if not self.eval_imgs:
            self.logger.warn('Please run evaluate first.')

        if self.params.use_cats:
            cat_ids = self.params.cat_ids
        else:
            cat_ids = [-1]

        num_thrs = len(self.params.iou_thrs)
        num_recalls = len(self.params.rec_thrs)
        num_cats = len(cat_ids)
        num_area_rngs = len(self.params.area_rng)
        num_imgs = len(self.params.img_ids)

        # -1 for absent categories
        precision = -np.ones((num_thrs, num_recalls, num_cats, num_area_rngs))
        recall = -np.ones((num_thrs, num_cats, num_area_rngs))

        # Initialize dt_pointers
        dt_pointers = {}
        for cat_idx in range(num_cats):
            dt_pointers[cat_idx] = {}
            for area_idx in range(num_area_rngs):
                dt_pointers[cat_idx][area_idx] = {}

        # Per category evaluation
        for cat_idx in range(num_cats):
            Nk = cat_idx * num_area_rngs * num_imgs
            for area_idx in range(num_area_rngs):
                Na = area_idx * num_imgs
                E = [
                    self.eval_imgs[Nk + Na + img_idx]
                    for img_idx in range(num_imgs)
                ]
                # Remove elements which are None
                E = [e for e in E if e is not None]
                if len(E) == 0:
                    continue

                # Append all scores: shape (N,)
                dt_scores = np.concatenate([e['dt_scores'] for e in E], axis=0)
                dt_ids = np.concatenate([e['dt_ids'] for e in E], axis=0)

                dt_idx = np.argsort(-dt_scores, kind='mergesort')
                dt_scores = dt_scores[dt_idx]
                dt_ids = dt_ids[dt_idx]

                dt_m = np.concatenate([e['dt_matches'] for e in E],
                                      axis=1)[:, dt_idx]
                dt_ig = np.concatenate([e['dt_ignore'] for e in E],
                                       axis=1)[:, dt_idx]

                gt_ig = np.concatenate([e['gt_ignore'] for e in E])
                # num gt anns to consider
                num_gt = np.count_nonzero(gt_ig == 0)

                if num_gt == 0:
                    continue

                tps = np.logical_and(dt_m, np.logical_not(dt_ig))
                fps = np.logical_and(np.logical_not(dt_m),
                                     np.logical_not(dt_ig))

                tp_sum = np.cumsum(tps, axis=1).astype(dtype=np.float)
                fp_sum = np.cumsum(fps, axis=1).astype(dtype=np.float)

                dt_pointers[cat_idx][area_idx] = {
                    'dt_ids': dt_ids,
                    'tps': tps,
                    'fps': fps,
                }

                for iou_thr_idx, (tp, fp) in enumerate(zip(tp_sum, fp_sum)):
                    tp = np.array(tp)
                    fp = np.array(fp)
                    num_tp = len(tp)
                    rc = tp / num_gt
                    if num_tp:
                        recall[iou_thr_idx, cat_idx, area_idx] = rc[-1]
                    else:
                        recall[iou_thr_idx, cat_idx, area_idx] = 0

                    # np.spacing(1) ~= eps
                    pr = tp / (fp + tp + np.spacing(1))
                    pr = pr.tolist()

                    # Replace each precision value with the maximum precision
                    # value to the right of that recall level. This ensures
                    # that the  calculated AP value will be less suspectable
                    # to small variations in the ranking.
                    for i in range(num_tp - 1, 0, -1):
                        if pr[i] > pr[i - 1]:
                            pr[i - 1] = pr[i]

                    rec_thrs_insert_idx = np.searchsorted(rc,
                                                          self.params.rec_thrs,
                                                          side='left')

                    pr_at_recall = [0.0] * num_recalls

                    try:
                        for _idx, pr_idx in enumerate(rec_thrs_insert_idx):
                            pr_at_recall[_idx] = pr[pr_idx]
                    except:  # noqa: E722
                        pass
                    precision[iou_thr_idx, :, cat_idx,
                              area_idx] = np.array(pr_at_recall)

        self.eval = {
            'params': self.params,
            'counts': [num_thrs, num_recalls, num_cats, num_area_rngs],
            'date': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
            'precision': precision,
            'recall': recall,
            'dt_pointers': dt_pointers,
        }

    def _summarize(self,
                   summary_type,
                   iou_thr=None,
                   area_rng='all',
                   freq_group_idx=None):
        aidx = [
            idx for idx, _area_rng in enumerate(self.params.area_rng_lbl)
            if _area_rng == area_rng
        ]

        if summary_type == 'ap':
            s = self.eval['precision']
            if iou_thr is not None:
                tidx = np.where(iou_thr == self.params.iou_thrs)[0]
                s = s[tidx]
            if freq_group_idx is not None:
                s = s[:, :, self.freq_groups[freq_group_idx], aidx]
            else:
                s = s[:, :, :, aidx]
        else:
            s = self.eval['recall']
            if iou_thr is not None:
                tidx = np.where(iou_thr == self.params.iou_thrs)[0]
                s = s[tidx]
            s = s[:, :, aidx]

        if len(s[s > -1]) == 0:
            mean_s = -1
        else:
            mean_s = np.mean(s[s > -1])
        return mean_s

    def summarize(self):
        """Compute and display summary metrics for evaluation results."""
        if not self.eval:
            raise RuntimeError('Please run accumulate() first.')

        max_dets = self.params.max_dets

        self.results['AP'] = self._summarize('ap')
        self.results['AP50'] = self._summarize('ap', iou_thr=0.50)
        self.results['AP75'] = self._summarize('ap', iou_thr=0.75)
        self.results['APs'] = self._summarize('ap', area_rng='small')
        self.results['APm'] = self._summarize('ap', area_rng='medium')
        self.results['APl'] = self._summarize('ap', area_rng='large')
        self.results['APr'] = self._summarize('ap', freq_group_idx=0)
        self.results['APc'] = self._summarize('ap', freq_group_idx=1)
        self.results['APf'] = self._summarize('ap', freq_group_idx=2)

        key = 'AR@{}'.format(max_dets)
        self.results[key] = self._summarize('ar')

        for area_rng in ['small', 'medium', 'large']:
            key = 'AR{}@{}'.format(area_rng[0], max_dets)
            self.results[key] = self._summarize('ar', area_rng=area_rng)

    def run(self):
        """Wrapper function which calculates the results."""
        self.evaluate()
        self.accumulate()
        self.summarize()

    def print_results(self):
        template = ' {:<18} {} @[ IoU={:<9} | area={:>6s} | maxDets={:>3d} catIds={:>3s}] = {:0.3f}'  # noqa: E501

        for key, value in self.results.items():
            max_dets = self.params.max_dets
            if 'AP' in key:
                title = 'Average Precision'
                _type = '(AP)'
            else:
                title = 'Average Recall'
                _type = '(AR)'

            if len(key) > 2 and key[2].isdigit():
                iou_thr = (float(key[2:]) / 100)
                iou = '{:0.2f}'.format(iou_thr)
            else:
                iou = '{:0.2f}:{:0.2f}'.format(self.params.iou_thrs[0],
                                               self.params.iou_thrs[-1])

            if len(key) > 2 and key[2] in ['r', 'c', 'f']:
                cat_group_name = key[2]
            else:
                cat_group_name = 'all'

            if len(key) > 2 and key[2] in ['s', 'm', 'l']:
                area_rng = key[2]
            else:
                area_rng = 'all'

            print(
                template.format(title, _type, iou, area_rng, max_dets,
                                cat_group_name, value))

    def get_results(self):
        if not self.results:
            self.logger.warn('results is empty. Call run().')
        return self.results


class Params:
    def __init__(self, iou_type):
        """Params for LVIS evaluation API."""
        self.img_ids = []
        self.cat_ids = []
        # np.arange causes trouble.  the data point on arange is slightly
        # larger than the true value
        self.iou_thrs = np.linspace(0.5,
                                    0.95,
                                    int(np.round((0.95 - 0.5) / 0.05)) + 1,
                                    endpoint=True)
        self.rec_thrs = np.linspace(0.0,
                                    1.00,
                                    int(np.round((1.00 - 0.0) / 0.01)) + 1,
                                    endpoint=True)
        self.max_dets = 300
        self.area_rng = [
            [0**2, 1e5**2],
            [0**2, 32**2],
            [32**2, 96**2],
            [96**2, 1e5**2],
        ]
        self.area_rng_lbl = ['all', 'small', 'medium', 'large']
        self.use_cats = 1
        # We bin categories in three bins based how many images of the training
        # set the category is present in.
        # r: Rare    :  < 10
        # c: Common  : >= 10 and < 100
        # f: Frequent: >= 100
        self.img_count_lbl = ['r', 'c', 'f']
        self.iou_type = iou_type


================================================
FILE: code/cocoapi/lvis/lvis/lvis.py
================================================
"""
API for accessing LVIS Dataset: https://lvisdataset.org.

LVIS API is a Python API that assists in loading, parsing and visualizing
the annotations in LVIS. In addition to this API, please download
images and annotations from the LVIS website.
"""

import json
import logging
import os
from collections import defaultdict
from urllib.request import urlretrieve

import pycocotools.mask as mask_utils


class LVIS:
    def __init__(self, annotation_path):
        """Class for reading and visualizing annotations.
        Args:
            annotation_path (str): location of annotation file
        """
        self.logger = logging.getLogger(__name__)
        self.logger.info('Loading annotations.')

        self.dataset = self._load_json(annotation_path)

        assert (type(self.dataset) == dict
                ), 'Annotation file format {} not supported.'.format(
                    type(self.dataset))
        self._create_index()

    def _load_json(self, path):
        with open(path, 'r') as f:
            return json.load(f)

    def _create_index(self):
        self.logger.info('Creating index.')

        self.img_ann_map = defaultdict(list)
        self.cat_img_map = defaultdict(list)

        self.anns = {}
        self.cats = {}
        self.imgs = {}

        for ann in self.dataset['annotations']:
            self.img_ann_map[ann['image_id']].append(ann)
            self.anns[ann['id']] = ann

        for img in self.dataset['images']:
            self.imgs[img['id']] = img

        for cat in self.dataset['categories']:
            self.cats[cat['id']] = cat

        for ann in self.dataset['annotations']:
            self.cat_img_map[ann['category_id']].append(ann['image_id'])

        self.logger.info('Index created.')

    def get_ann_ids(self, img_ids=None, cat_ids=None, area_rng=None):
        """Get ann ids that satisfy given filter conditions.

        Args:
            img_ids (int array): get anns for given imgs
            cat_ids (int array): get anns for given cats
            area_rng (float array): get anns for a given area range.
                e.g [0, inf]

        Returns:
            ids (int array): integer array of ann ids
        """
        anns = []
        if img_ids is not None:
            for img_id in img_ids:
                anns.extend(self.img_ann_map[img_id])
        else:
            anns = self.dataset['annotations']

        # return early if no more filtering required
        if cat_ids is None and area_rng is None:
            return [_ann['id'] for _ann in anns]

        cat_ids = set(cat_ids)

        if area_rng is None:
            area_rng = [0, float('inf')]

        ann_ids = [
            _ann['id'] for _ann in anns if _ann['category_id'] in cat_ids
            and _ann['area'] > area_rng[0] and _ann['area'] < area_rng[1]
        ]
        return ann_ids

    def get_cat_ids(self):
        """Get all category ids.

        Returns:
            ids (int array): integer array of category ids
        """
        return list(self.cats.keys())

    def get_img_ids(self):
        """Get all img ids.

        Returns:
            ids (int array): integer array of image ids
        """
        return list(self.imgs.keys())

    def _load_helper(self, _dict, ids):
        if ids is None:
            return list(_dict.values())
        else:
            return [_dict[id] for id in ids]

    def load_anns(self, ids=None):
        """Load anns with the specified ids. If ids=None load all anns.

        Args:
            ids (int array): integer array of annotation ids

        Returns:
            anns (dict array) : loaded annotation objects
        """
        return self._load_helper(self.anns, ids)

    def load_cats(self, ids):
        """Load categories with the specified ids. If ids=None load all
        categories.

        Args:
            ids (int array): integer array of category ids

        Returns:
            cats (dict array) : loaded category dicts
        """
        return self._load_helper(self.cats, ids)

    def load_imgs(self, ids):
        """Load categories with the specified ids. If ids=None load all images.

        Args:
            ids (int array): integer array of image ids

        Returns:
            imgs (dict array) : loaded image dicts
        """
        return self._load_helper(self.imgs, ids)

    def download(self, save_dir, img_ids=None):
        """Download images from mscoco.org server.
        Args:
            save_dir (str): dir to save downloaded images
            img_ids (int array): img ids of images to download
        """
        imgs = self.load_imgs(img_ids)

        if not os.path.exists(save_dir):
            os.makedirs(save_dir)

        for img in imgs:
            file_name = os.path.join(save_dir, img['coco_url'].split('/')[-1])
            if not os.path.exists(file_name):
                urlretrieve(img['coco_url'], file_name)

    def ann_to_rle(self, ann):
        """Convert annotation which can be polygons, uncompressed RLE to RLE.
        Args:
            ann (dict) : annotation object

        Returns:
            ann (rle)
        """
        img_data = self.imgs[ann['image_id']]
        h, w = img_data['height'], img_data['width']
        segm = ann['segmentation']
        if isinstance(segm, list):
            # polygon -- a single object might consist of multiple parts
            # we merge all parts into one mask rle code
            rles = mask_utils.frPyObjects(segm, h, w)
            rle = mask_utils.merge(rles)
        elif isinstance(segm['counts'], list):
            # uncompressed RLE
            rle = mask_utils.frPyObjects(segm, h, w)
        else:
            # rle
            rle = ann['segmentation']
        return rle

    def ann_to_mask(self, ann):
        """Convert annotation which can be polygons, uncompressed RLE, or RLE
        to binary mask.
        Args:
            ann (dict) : annotation object

        Returns:
            binary mask (numpy 2D array)
        """
        rle = self.ann_to_rle(ann)
        return mask_utils.decode(rle)


================================================
FILE: code/cocoapi/lvis/lvis/results.py
================================================
import logging
from collections import defaultdict
from copy import deepcopy

import pycocotools.mask as mask_utils

from .lvis import LVIS


class LVISResults(LVIS):
    def __init__(self, lvis_gt, results, max_dets=300):
        """Constructor for LVIS results.
        Args:
            lvis_gt (LVIS class instance, or str containing path of
            annotation file)
            results (str containing path of result file or a list of dicts)
            max_dets (int):  max number of detections per image. The official
            value of max_dets for LVIS is 300.
        """
        if isinstance(lvis_gt, LVIS):
            self.dataset = deepcopy(lvis_gt.dataset)
        elif isinstance(lvis_gt, str):
            self.dataset = self._load_json(lvis_gt)
        else:
            raise TypeError('Unsupported type {} of lvis_gt.'.format(lvis_gt))

        self.logger = logging.getLogger(__name__)
        self.logger.info('Loading and preparing results.')

        if isinstance(results, str):
            result_anns = self._load_json(results)
        else:
            # this path way is provided to avoid saving and loading result
            # during training.
            self.logger.warn(
                'Assuming user provided the results in correct format.')
            result_anns = results

        assert isinstance(result_anns, list), 'results is not a list.'

        if max_dets >= 0:
            result_anns = self.limit_dets_per_image(result_anns, max_dets)

        if 'bbox' in result_anns[0]:
            for id, ann in enumerate(result_anns):
                x1, y1, w, h = ann['bbox']
                x2 = x1 + w
                y2 = y1 + h

                if 'segmentation' not in ann:
                    ann['segmentation'] = [[x1, y1, x1, y2, x2, y2, x2, y1]]

                ann['area'] = w * h
                ann['id'] = id + 1

        elif 'segmentation' in result_anns[0]:
            for id, ann in enumerate(result_anns):
                # Only support compressed RLE format as segmentation results
                ann['area'] = mask_utils.area(ann['segmentation'])

                if 'bbox' not in ann:
                    ann['bbox'] = mask_utils.toBbox(ann['segmentation'])

                ann['id'] = id + 1

        self.dataset['annotations'] = result_anns
        self._create_index()

        img_ids_in_result = [ann['image_id'] for ann in result_anns]

        assert set(img_ids_in_result) == (
            set(img_ids_in_result) & set(self.get_img_ids())
        ), 'Results do not correspond to current LVIS set.'

    def limit_dets_per_image(self, anns, max_dets):
        img_ann = defaultdict(list)
        for ann in anns:
            img_ann[ann['image_id']].append(ann)

        for img_id, _anns in img_ann.items():
            if len(_anns) <= max_dets:
                continue
            _anns = sorted(_anns, key=lambda ann: ann['score'], reverse=True)
            img_ann[img_id] = _anns[:max_dets]

        return [ann for anns in img_ann.values() for ann in anns]

    def get_top_results(self, img_id, score_thrs):
        ann_ids = self.get_ann_ids(img_ids=[img_id])
        anns = self.load_anns(ann_ids)
        return list(filter(lambda ann: ann['score'] > score_thrs, anns))


================================================
FILE: code/cocoapi/lvis/lvis/vis.py
================================================
import logging
import os

import cv2
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Polygon

from lvis.colormap import colormap
from lvis.lvis import LVIS
from lvis.results import LVISResults


class LVISVis:
    def __init__(self, lvis_gt, lvis_dt=None, img_dir=None, dpi=75):
        """Constructor for LVISVis.

        Args:
            lvis_gt (LVIS class instance, or str containing path of annotation
                file)
            lvis_dt (LVISResult class instance, or str containing path of
                result file, or list of dict)
            img_dir (str): path of folder containing all images. If None, the
                image to be displayed will be downloaded to the current working
                dir.
            dpi (int): dpi for figure size setup
        """
        self.logger = logging.getLogger(__name__)

        if isinstance(lvis_gt, LVIS):
            self.lvis_gt = lvis_gt
        elif isinstance(lvis_gt, str):
            self.lvis_gt = LVIS(lvis_gt)
        else:
            raise TypeError('Unsupported type {} of lvis_gt.'.format(lvis_gt))

        if lvis_dt is not None:
            if isinstance(lvis_dt, LVISResults):
                self.lvis_dt = lvis_dt
            elif isinstance(lvis_dt, (str, list)):
                self.lvis_dt = LVISResults(self.lvis_gt, lvis_dt)
            else:
                raise TypeError(
                    'Unsupported type {} of lvis_dt.'.format(lvis_dt))
        else:
            self.lvis_dt = None
        self.dpi = dpi
        self.img_dir = img_dir if img_dir else '.'
        if self.img_dir == '.':
            self.logger.warn(
                'img_dir not specified. Images will be downloaded.')

    def coco_segm_to_poly(self, _list):
        x = _list[0::2]
        y = _list[1::2]
        points = np.asarray([x, y])
        return np.transpose(points)

    def get_synset(self, idx):
        synset = self.lvis_gt.load_cats(ids=[idx])[0]['synset']
        text = synset.split('.')
        text = '{}.{}'.format(text[0], int(text[-1]))
        return text

    def setup_figure(self, img, title='', dpi=75):
        fig = plt.figure(frameon=False)
        fig.set_size_inches(img.shape[1] / dpi, img.shape[0] / dpi)
        ax = plt.Axes(fig, [0.0, 0.0, 1.0, 1.0])
        ax.set_title(title)
        ax.axis('off')
        fig.add_axes(ax)
        ax.imshow(img)
        return fig, ax

    def vis_bbox(self, ax, bbox, box_alpha=0.5, edgecolor='g', linestyle='--'):
        # bbox should be of the form x, y, w, h
        ax.add_patch(
            plt.Rectangle(
                (bbox[0], bbox[1]),
                bbox[2],
                bbox[3],
                fill=False,
                edgecolor=edgecolor,
                linewidth=2.5,
                alpha=box_alpha,
                linestyle=linestyle,
            ))

    def vis_text(self, ax, bbox, text, color='w'):
        ax.text(
            bbox[0],
            bbox[1] - 2,
            text,
            fontsize=15,
            family='serif',
            bbox=dict(facecolor='none', alpha=0.4, pad=0, edgecolor='none'),
            color=color,
            zorder=10,
        )

    def vis_mask(self, ax, segm, color):
        # segm is numpy array of shape Nx2
        polygon = Polygon(segm,
                          fill=True,
                          facecolor=color,
                          edgecolor=color,
                          linewidth=3,
                          alpha=0.5)
        ax.add_patch(polygon)

    def get_color(self, idx):
        color_list = colormap(rgb=True) / 255
        return color_list[idx % len(color_list), 0:3]

    def load_img(self, img_id):
        img = self.lvis_gt.load_imgs([img_id])[0]
        img_path = os.path.join(self.img_dir, img['coco_url'].split('/')[-1])
        if not os.path.exists(img_path):
            self.lvis_gt.download(self.img_dir, img_ids=[img_id])
        img = cv2.imread(img_path)
        b, g, r = cv2.split(img)
        return cv2.merge([r, g, b])

    def vis_img(self,
                img_id,
                show_boxes=False,
                show_segms=True,
                show_classes=False,
                cat_ids_to_show=None):
        ann_ids = self.lvis_gt.get_ann_ids(img_ids=[img_id])
        anns = self.lvis_gt.load_anns(ids=ann_ids)
        boxes, segms, classes = [], [], []
        for ann in anns:
            boxes.append(ann['bbox'])
            segms.append(ann['segmentation'])
            classes.append(ann['category_id'])

        if len(boxes) == 0:
            self.logger.warn('No gt anno found for img_id: {}'.format(img_id))
            return

        boxes = np.asarray(boxes)
        areas = boxes[:, 2] * boxes[:, 3]
        sorted_inds = np.argsort(-areas)

        fig, ax = self.setup_figure(self.load_img(img_id))

        for idx in sorted_inds:
            if cat_ids_to_show is not None and classes[
                    idx] not in cat_ids_to_show:
                continue
            color = self.get_color(idx)
            if show_boxes:
                self.vis_bbox(ax, boxes[idx], edgecolor=color)
            if show_classes:
                text = self.get_synset(classes[idx])
                self.vis_text(ax, boxes[idx], text)
            if show_segms:
                for segm in segms[idx]:
                    self.vis_mask(ax, self.coco_segm_to_poly(segm), color)

    def vis_result(self,
                   img_id,
                   show_boxes=False,
                   show_segms=True,
                   show_classes=False,
                   cat_ids_to_show=None,
                   score_thrs=0.0,
                   show_scores=True):
        assert self.lvis_dt is not None, 'lvis_dt was not specified.'
        anns = self.lvis_dt.get_top_results(img_id, score_thrs)
        boxes, segms, classes, scores = [], [], [], []
        for ann in anns:
            boxes.append(ann['bbox'])
            segms.append(ann['segmentation'])
            classes.append(ann['category_id'])
            scores.append(ann['score'])

        if len(boxes) == 0:
            self.logger.warn('No gt anno found for img_id: {}'.format(img_id))
            return

        boxes = np.asarray(boxes)
        areas = boxes[:, 2] * boxes[:, 3]
        sorted_inds = np.argsort(-areas)

        fig, ax = self.setup_figure(self.load_img(img_id))

        for idx in sorted_inds:
            if cat_ids_to_show is not None and classes[
                    idx] not in cat_ids_to_show:
                continue
            color = self.get_color(idx)
            if show_boxes:
                self.vis_bbox(ax, boxes[idx], edgecolor=color)
            if show_classes:
                text = self.get_synset(classes[idx])
                if show_scores:
                    text = '{}: {:.2f}'.format(text, scores[idx])
                self.vis_text(ax, boxes[idx], text)
            if show_segms:
                for segm in segms[idx]:
                    self.vis_mask(ax, self.coco_segm_to_poly(segm), color)


================================================
FILE: code/cocoapi/lvis/requirements.txt
================================================
cycler>=0.10.0
Cython>=0.29.12
kiwisolver>=1.1.0
matplotlib>=3.1.1
numpy>=1.18.2
opencv-python>=4.1.0.25
pyparsing>=2.4.0
python-dateutil>=2.8.0
six>=1.12.0


================================================
FILE: code/cocoapi/lvis/setup.py
================================================
"""LVIS (pronounced ‘el-vis’): is a new dataset for Large Vocabulary Instance
Segmentation. We collect over 2 million high-quality instance segmentation
masks for over 1200 entry-level object categories in 164k images. LVIS API
enables reading and interacting with annotation files, visualizing annotations,
and evaluating results.

"""
import os.path
import sys

import setuptools

sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'lvis'))

dir_path = os.path.dirname(os.path.realpath(__file__))
with open(os.path.join(dir_path, 'requirements.txt')) as f:
    reqs = f.read()

DISTNAME = 'mmlvis'
DESCRIPTION = 'Python API for LVIS dataset.'
AUTHOR = 'Agrim Gupta'
REQUIREMENTS = (reqs.strip().split('\n'), )
DOCLINES = (__doc__ or '')

if __name__ == '__main__':
    setuptools.setup(name=DISTNAME,
                     install_requires=REQUIREMENTS,
                     packages=setuptools.find_packages(),
                     version='10.5.3',
                     description=DESCRIPTION,
                     long_description=DOCLINES,
                     long_description_content_type='text/markdown',
                     author=AUTHOR)


================================================
FILE: code/cocoapi/pycocotools/MANIFEST.in
================================================
include common/*.cpp common/*.h common/*.c
include pycocotools/_mask.pyx


================================================
FILE: code/cocoapi/pycocotools/Makefile
================================================
all:
    # install pycocotools locally
	python setup.py build_ext --inplace
	rm -rf build

install:
	# install pycocotools to the Python site-packages
	python setup.py build_ext install
	rm -rf build


================================================
FILE: code/cocoapi/pycocotools/common/gason.cpp
================================================
// https://github.com/vivkin/gason - pulled January 10, 2016
#include "gason.h"
#include <stdlib.h>

#define JSON_ZONE_SIZE 4096
#define JSON_STACK_SIZE 32

const char *jsonStrError(int err) {
    switch (err) {
#define XX(no, str) \
    case JSON_##no: \
        return str;
        JSON_ERRNO_MAP(XX)
#undef XX
    default:
        return "unknown";
    }
}

void *JsonAllocator::allocate(size_t size) {
    size = (size + 7) & ~7;

    if (head && head->used + size <= JSON_ZONE_SIZE) {
        char *p = (char *)head + head->used;
        head->used += size;
        return p;
    }

    size_t allocSize = sizeof(Zone) + size;
    Zone *zone = (Zone *)malloc(allocSize <= JSON_ZONE_SIZE ? JSON_ZONE_SIZE : allocSize);
    if (zone == nullptr)
        return nullptr;
    zone->used = allocSize;
    if (allocSize <= JSON_ZONE_SIZE || head == nullptr) {
        zone->next = head;
        head = zone;
    } else {
        zone->next = head->next;
        head->next = zone;
    }
    return (char *)zone + sizeof(Zone);
}

void JsonAllocator::deallocate() {
    while (head) {
        Zone *next = head->next;
        free(head);
        head = next;
    }
}

static inline bool isspace(char c) {
    return c == ' ' || (c >= '\t' && c <= '\r');
}

static inline bool isdelim(char c) {
    return c == ',' || c == ':' || c == ']' || c == '}' || isspace(c) || !c;
}

static inline bool isdigit(char c) {
    return c >= '0' && c <= '9';
}

static inline bool isxdigit(char c) {
    return (c >= '0' && c <= '9') || ((c & ~' ') >= 'A' && (c & ~' ') <= 'F');
}

static inline int char2int(char c) {
    if (c <= '9')
        return c - '0';
    return (c & ~' ') - 'A' + 10;
}

static double string2double(char *s, char **endptr) {
    char ch = *s;
    if (ch == '-')
        ++s;

    double result = 0;
    while (isdigit(*s))
        result = (result * 10) + (*s++ - '0');

    if (*s == '.') {
        ++s;

        double fraction = 1;
        while (isdigit(*s)) {
            fraction *= 0.1;
            result += (*s++ - '0') * fraction;
        }
    }

    if (*s == 'e' || *s == 'E') {
        ++s;

        double base = 10;
        if (*s == '+')
            ++s;
        else if (*s == '-') {
            ++s;
            base = 0.1;
        }

        unsigned int exponent = 0;
        while (isdigit(*s))
            exponent = (exponent * 10) + (*s++ - '0');

        double power = 1;
        for (; exponent; exponent >>= 1, base *= base)
            if (exponent & 1)
                power *= base;

        result *= power;
    }

    *endptr = s;
    return ch == '-' ? -result : result;
}

static inline JsonNode *insertAfter(JsonNode *tail, JsonNode *node) {
    if (!tail)
        return node->next = node;
    node->next = tail->next;
    tail->next = node;
    return node;
}

static inline JsonValue listToValue(JsonTag tag, JsonNode *tail) {
    if (tail) {
        auto head = tail->next;
        tail->next = nullptr;
        return JsonValue(tag, head);
    }
    return JsonValue(tag, nullptr);
}

int jsonParse(char *s, char **endptr, JsonValue *value, JsonAllocator &allocator) {
    JsonNode *tails[JSON_STACK_SIZE];
    JsonTag tags[JSON_STACK_SIZE];
    char *keys[JSON_STACK_SIZE];
    JsonValue o;
    int pos = -1;
    bool separator = true;
    JsonNode *node;
    *endptr = s;

    while (*s) {
        while (isspace(*s)) {
            ++s;
            if (!*s) break;
        }
        *endptr = s++;
        switch (**endptr) {
        case '-':
            if (!isdigit(*s) && *s != '.') {
                *endptr = s;
                return JSON_BAD_NUMBER;
            }
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            o = JsonValue(string2double(*endptr, &s));
            if (!isdelim(*s)) {
                *endptr = s;
                return JSON_BAD_NUMBER;
            }
            break;
        case '"':
            o = JsonValue(JSON_STRING, s);
            for (char *it = s; *s; ++it, ++s) {
                int c = *it = *s;
                if (c == '\\') {
                    c = *++s;
                    switch (c) {
                    case '\\':
                    case '"':
                    case '/':
                        *it = c;
                        break;
                    case 'b':
                        *it = '\b';
                        break;
                    case 'f':
                        *it = '\f';
                        break;
                    case 'n':
                        *it = '\n';
                        break;
                    case 'r':
                        *it = '\r';
                        break;
                    case 't':
                        *it = '\t';
                        break;
                    case 'u':
                        c = 0;
                        for (int i = 0; i < 4; ++i) {
                            if (isxdigit(*++s)) {
                                c = c * 16 + char2int(*s);
                            } else {
                                *endptr = s;
                                return JSON_BAD_STRING;
                            }
                        }
                        if (c < 0x80) {
                            *it = c;
                        } else if (c < 0x800) {
                            *it++ = 0xC0 | (c >> 6);
                            *it = 0x80 | (c & 0x3F);
                        } else {
                            *it++ = 0xE0 | (c >> 12);
                            *it++ = 0x80 | ((c >> 6) & 0x3F);
                            *it = 0x80 | (c & 0x3F);
                        }
                        break;
                    default:
                        *endptr = s;
                        return JSON_BAD_STRING;
                    }
                } else if ((unsigned int)c < ' ' || c == '\x7F') {
                    *endptr = s;
                    return JSON_BAD_STRING;
                } else if (c == '"') {
                    *it = 0;
                    ++s;
                    break;
                }
            }
            if (!isdelim(*s)) {
                *endptr = s;
                return JSON_BAD_STRING;
            }
            break;
        case 't':
            if (!(s[0] == 'r' && s[1] == 'u' && s[2] == 'e' && isdelim(s[3])))
                return JSON_BAD_IDENTIFIER;
            o = JsonValue(JSON_TRUE);
            s += 3;
            break;
        case 'f':
            if (!(s[0] == 'a' && s[1] == 'l' && s[2] == 's' && s[3] == 'e' && isdelim(s[4])))
                return JSON_BAD_IDENTIFIER;
            o = JsonValue(JSON_FALSE);
            s += 4;
            break;
        case 'n':
            if (!(s[0] == 'u' && s[1] == 'l' && s[2] == 'l' && isdelim(s[3])))
                return JSON_BAD_IDENTIFIER;
            o = JsonValue(JSON_NULL);
            s += 3;
            break;
        case ']':
            if (pos == -1)
                return JSON_STACK_UNDERFLOW;
            if (tags[pos] != JSON_ARRAY)
                return JSON_MISMATCH_BRACKET;
            o = listToValue(JSON_ARRAY, tails[pos--]);
            break;
        case '}':
            if (pos == -1)
                return JSON_STACK_UNDERFLOW;
            if (tags[pos] != JSON_OBJECT)
                return JSON_MISMATCH_BRACKET;
            if (keys[pos] != nullptr)
                return JSON_UNEXPECTED_CHARACTER;
            o = listToValue(JSON_OBJECT, tails[pos--]);
            break;
        case '[':
            if (++pos == JSON_STACK_SIZE)
                return JSON_STACK_OVERFLOW;
            tails[pos] = nullptr;
            tags[pos] = JSON_ARRAY;
            keys[pos] = nullptr;
            separator = true;
            continue;
        case '{':
            if (++pos == JSON_STACK_SIZE)
                return JSON_STACK_OVERFLOW;
            tails[pos] = nullptr;
            tags[pos] = JSON_OBJECT;
            keys[pos] = nullptr;
            separator = true;
            continue;
        case ':':
            if (separator || keys[pos] == nullptr)
                return JSON_UNEXPECTED_CHARACTER;
            separator = true;
            continue;
        case ',':
            if (separator || keys[pos] != nullptr)
                return JSON_UNEXPECTED_CHARACTER;
            separator = true;
            continue;
        case '\0':
            continue;
        default:
            return JSON_UNEXPECTED_CHARACTER;
        }

        separator = false;

        if (pos == -1) {
            *endptr = s;
            *value = o;
            return JSON_OK;
        }

        if (tags[pos] == JSON_OBJECT) {
            if (!keys[pos]) {
                if (o.getTag() != JSON_STRING)
                    return JSON_UNQUOTED_KEY;
                keys[pos] = o.toString();
                continue;
            }
            if ((node = (JsonNode *) allocator.allocate(sizeof(JsonNode))) == nullptr)
                return JSON_ALLOCATION_FAILURE;
            tails[pos] = insertAfter(tails[pos], node);
            tails[pos]->key = keys[pos];
            keys[pos] = nullptr;
        } else {
            if ((node = (JsonNode *) allocator.allocate(sizeof(JsonNode) - sizeof(char *))) == nullptr)
                return JSON_ALLOCATION_FAILURE;
            tails[pos] = insertAfter(tails[pos], node);
        }
        tails[pos]->value = o;
    }
    return JSON_BREAKING_BAD;
}


================================================
FILE: code/cocoapi/pycocotools/common/gason.h
================================================
// https://github.com/vivkin/gason - pulled January 10, 2016
#pragma once

#include <stdint.h>
#include <stddef.h>
#include <assert.h>

enum JsonTag {
    JSON_NUMBER = 0,
    JSON_STRING,
    JSON_ARRAY,
    JSON_OBJECT,
    JSON_TRUE,
    JSON_FALSE,
    JSON_NULL = 0xF
};

struct JsonNode;

#define JSON_VALUE_PAYLOAD_MASK 0x00007FFFFFFFFFFFULL
#define JSON_VALUE_NAN_MASK 0x7FF8000000000000ULL
#define JSON_VALUE_TAG_MASK 0xF
#define JSON_VALUE_TAG_SHIFT 47

union JsonValue {
    uint64_t ival;
    double fval;

    JsonValue(double x)
        : fval(x) {
    }
    JsonValue(JsonTag tag = JSON_NULL, void *payload = nullptr) {
        assert((uintptr_t)payload <= JSON_VALUE_PAYLOAD_MASK);
        ival = JSON_VALUE_NAN_MASK | ((uint64_t)tag << JSON_VALUE_TAG_SHIFT) | (uintptr_t)payload;
    }
    bool isDouble() const {
        return (int64_t)ival <= (int64_t)JSON_VALUE_NAN_MASK;
    }
    JsonTag getTag() const {
        return isDouble() ? JSON_NUMBER : JsonTag((ival >> JSON_VALUE_TAG_SHIFT) & JSON_VALUE_TAG_MASK);
    }
    uint64_t getPayload() const {
        assert(!isDouble());
        return ival & JSON_VALUE_PAYLOAD_MASK;
    }
    double toNumber() const {
        assert(getTag() == JSON_NUMBER);
        return fval;
    }
    char *toString() const {
        assert(getTag() == JSON_STRING);
        return (char *)getPayload();
    }
    JsonNode *toNode() const {
        assert(getTag() == JSON_ARRAY || getTag() == JSON_OBJECT);
        return (JsonNode *)getPayload();
    }
};

struct JsonNode {
    JsonValue value;
    JsonNode *next;
    char *key;
};

struct JsonIterator {
    JsonNode *p;

    void operator++() {
        p = p->next;
    }
    bool operator!=(const JsonIterator &x) const {
        return p != x.p;
    }
    JsonNode *operator*() const {
        return p;
    }
    JsonNode *operator->() const {
        return p;
    }
};

inline JsonIterator begin(JsonValue o) {
    return JsonIterator{o.toNode()};
}
inline JsonIterator end(JsonValue) {
    return JsonIterator{nullptr};
}

#define JSON_ERRNO_MAP(XX)                           \
    XX(OK, "ok")                                     \
    XX(BAD_NUMBER, "bad number")                     \
    XX(BAD_STRING, "bad string")                     \
    XX(BAD_IDENTIFIER, "bad identifier")             \
    XX(STACK_OVERFLOW, "stack overflow")             \
    XX(STACK_UNDERFLOW, "stack underflow")           \
    XX(MISMATCH_BRACKET, "mismatch bracket")         \
    XX(UNEXPECTED_CHARACTER, "unexpected character") \
    XX(UNQUOTED_KEY, "unquoted key")                 \
    XX(BREAKING_BAD, "breaking bad")                 \
    XX(ALLOCATION_FAILURE, "allocation failure")

enum JsonErrno {
#define XX(no, str) JSON_##no,
    JSON_ERRNO_MAP(XX)
#undef XX
};

const char *jsonStrError(int err);

class JsonAllocator {
    struct Zone {
        Zone *next;
        size_t used;
    } *head = nullptr;

public:
    JsonAllocator() = default;
    JsonAllocator(const JsonAllocator &) = delete;
    JsonAllocator &operator=(const JsonAllocator &) = delete;
    JsonAllocator(JsonAllocator &&x) : head(x.head) {
        x.head = nullptr;
    }
    JsonAllocator &operator=(JsonAllocator &&x) {
        head = x.head;
        x.head = nullptr;
        return *this;
    }
    ~JsonAllocator() {
        deallocate();
    }
    void *allocate(size_t size);
    void deallocate();
};

int jsonParse(char *str, char **endptr, JsonValue *value, JsonAllocator &allocator);


================================================
FILE: code/cocoapi/pycocotools/common/maskApi.c
================================================
/**************************************************************************
* Microsoft COCO Toolbox.      version 2.0
* Data, paper, and tutorials available at:  http://mscoco.org/
* Code written by Piotr Dollar and Tsung-Yi Lin, 2015.
* Licensed under the Simplified BSD License [see coco/license.txt]
**************************************************************************/
#include "maskApi.h"
#include <math.h>
#include <stdlib.h>

uint umin( uint a, uint b ) { return (a<b) ? a : b; }
uint umax( uint a, uint b ) { return (a>b) ? a : b; }

void rleInit( RLE *R, siz h, siz w, siz m, uint *cnts ) {
  R->h=h; R->w=w; R->m=m; R->cnts=(m==0)?0:malloc(sizeof(uint)*m);
  siz j; if(cnts) for(j=0; j<m; j++) R->cnts[j]=cnts[j];
}

void rleFree( RLE *R ) {
  free(R->cnts); R->cnts=0;
}

void rlesInit( RLE **R, siz n ) {
  siz i; *R = (RLE*) malloc(sizeof(RLE)*n);
  for(i=0; i<n; i++) rleInit((*R)+i,0,0,0,0);
}

void rlesFree( RLE **R, siz n ) {
  siz i; for(i=0; i<n; i++) rleFree((*R)+i); free(*R); *R=0;
}

void rleEncode( RLE *R, const byte *M, siz h, siz w, siz n ) {
  siz i, j, k, a=w*h; uint c, *cnts; byte p;
  cnts = malloc(sizeof(uint)*(a+1));
  for(i=0; i<n; i++) {
    const byte *T=M+a*i; k=0; p=0; c=0;
    for(j=0; j<a; j++) { if(T[j]!=p) { cnts[k++]=c; c=0; p=T[j]; } c++; }
    cnts[k++]=c; rleInit(R+i,h,w,k,cnts);
  }
  free(cnts);
}

void rleDecode( const RLE *R, byte *M, siz n ) {
  siz i, j, k; for( i=0; i<n; i++ ) {
    byte v=0; for( j=0; j<R[i].m; j++ ) {
      for( k=0; k<R[i].cnts[j]; k++ ) *(M++)=v; v=!v; }}
}

void rleMerge( const RLE *R, RLE *M, siz n, int intersect ) {
  uint *cnts, c, ca, cb, cc, ct; int v, va, vb, vp;
  siz i, a, b, h=R[0].h, w=R[0].w, m=R[0].m; RLE A, B;
  if(n==0) { rleInit(M,0,0,0,0); return; }
  if(n==1) { rleInit(M,h,w,m,R[0].cnts); return; }
  cnts = malloc(sizeof(uint)*(h*w+1));
  for( a=0; a<m; a++ ) cnts[a]=R[0].cnts[a];
  for( i=1; i<n; i++ ) {
    B=R[i]; if(B.h!=h||B.w!=w) { h=w=m=0; break; }
    rleInit(&A,h,w,m,cnts); ca=A.cnts[0]; cb=B.cnts[0];
    v=va=vb=0; m=0; a=b=1; cc=0; ct=1;
    while( ct>0 ) {
      c=umin(ca,cb); cc+=c; ct=0;
      ca-=c; if(!ca && a<A.m) { ca=A.cnts[a++]; va=!va; } ct+=ca;
      cb-=c; if(!cb && b<B.m) { cb=B.cnts[b++]; vb=!vb; } ct+=cb;
      vp=v; if(intersect) v=va&&vb; else v=va||vb;
      if( v!=vp||ct==0 ) { cnts[m++]=cc; cc=0; }
    }
    rleFree(&A);
  }
  rleInit(M,h,w,m,cnts); free(cnts);
}

void rleArea( const RLE *R, siz n, uint *a ) {
  siz i, j; for( i=0; i<n; i++ ) {
    a[i]=0; for( j=1; j<R[i].m; j+=2 ) a[i]+=R[i].cnts[j]; }
}

void rleIou( RLE *dt, RLE *gt, siz m, siz n, byte *iscrowd, double *o ) {
  siz g, d; BB db, gb; int crowd;
  db=malloc(sizeof(double)*m*4); rleToBbox(dt,db,m);
  gb=malloc(sizeof(double)*n*4); rleToBbox(gt,gb,n);
  bbIou(db,gb,m,n,iscrowd,o); free(db); free(gb);
  for( g=0; g<n; g++ ) for( d=0; d<m; d++ ) if(o[g*m+d]>0) {
    crowd=iscrowd!=NULL && iscrowd[g];
    if(dt[d].h!=gt[g].h || dt[d].w!=gt[g].w) { o[g*m+d]=-1; continue; }
    siz ka, kb, a, b; uint c, ca, cb, ct, i, u; int va, vb;
    ca=dt[d].cnts[0]; ka=dt[d].m; va=vb=0;
    cb=gt[g].cnts[0]; kb=gt[g].m; a=b=1; i=u=0; ct=1;
    while( ct>0 ) {
      c=umin(ca,cb); if(va||vb) { u+=c; if(va&&vb) i+=c; } ct=0;
      ca-=c; if(!ca && a<ka) { ca=dt[d].cnts[a++]; va=!va; } ct+=ca;
      cb-=c; if(!cb && b<kb) { cb=gt[g].cnts[b++]; vb=!vb; } ct+=cb;
    }
    if(i==0) u=1; else if(crowd) rleArea(dt+d,1,&u);
    o[g*m+d] = (double)i/(double)u;
  }
}

void rleNms( RLE *dt, siz n, uint *keep, double thr ) {
  siz i, j; double u;
  for( i=0; i<n; i++ ) keep[i]=1;
  for( i=0; i<n; i++ ) if(keep[i]) {
    for( j=i+1; j<n; j++ ) if(keep[j]) {
      rleIou(dt+i,dt+j,1,1,0,&u);
      if(u>thr) keep[j]=0;
    }
  }
}

void bbIou( BB dt, BB gt, siz m, siz n, byte *iscrowd, double *o ) {
  double h, w, i, u, ga, da; siz g, d; int crowd;
  for( g=0; g<n; g++ ) {
    BB G=gt+g*4; ga=G[2]*G[3]; crowd=iscrowd!=NULL && iscrowd[g];
    for( d=0; d<m; d++ ) {
      BB D=dt+d*4; da=D[2]*D[3]; o[g*m+d]=0;
      w=fmin(D[2]+D[0],G[2]+G[0])-fmax(D[0],G[0]); if(w<=0) continue;
      h=fmin(D[3]+D[1],G[3]+G[1])-fmax(D[1],G[1]); if(h<=0) continue;
      i=w*h; u = crowd ? da : da+ga-i; o[g*m+d]=i/u;
    }
  }
}

void bbNms( BB dt, siz n, uint *keep, double thr ) {
  siz i, j; double u;
  for( i=0; i<n; i++ ) keep[i]=1;
  for( i=0; i<n; i++ ) if(keep[i]) {
    for( j=i+1; j<n; j++ ) if(keep[j]) {
      bbIou(dt+i*4,dt+j*4,1,1,0,&u);
      if(u>thr) keep[j]=0;
    }
  }
}

void rleToBbox( const RLE *R, BB bb, siz n ) {
  siz i; for( i=0; i<n; i++ ) {
    uint h, w, x, y, xs, ys, xe, ye, xp, cc, t; siz j, m;
    h=(uint)R[i].h; w=(uint)R[i].w; m=R[i].m;
    m=((siz)(m/2))*2; xs=w; ys=h; xe=ye=0; cc=0;
    if(m==0) { bb[4*i+0]=bb[4*i+1]=bb[4*i+2]=bb[4*i+3]=0; continue; }
    for( j=0; j<m; j++ ) {
      cc+=R[i].cnts[j]; t=cc-j%2; y=t%h; x=(t-y)/h;
      if(j%2==0) xp=x; else if(xp<x) { ys=0; ye=h-1; }
      xs=umin(xs,x); xe=umax(xe,x); ys=umin(ys,y); ye=umax(ye,y);
    }
    bb[4*i+0]=xs; bb[4*i+2]=xe-xs+1;
    bb[4*i+1]=ys; bb[4*i+3]=ye-ys+1;
  }
}

void rleFrBbox( RLE *R, const BB bb, siz h, siz w, siz n ) {
  siz i; for( i=0; i<n; i++ ) {
    double xs=bb[4*i+0], xe=xs+bb[4*i+2];
    double ys=bb[4*i+1], ye=ys+bb[4*i+3];
    double xy[8] = {xs,ys,xs,ye,xe,ye,xe,ys};
    rleFrPoly( R+i, xy, 4, h, w );
  }
}

int uintCompare(const void *a, const void *b) {
  uint c=*((uint*)a), d=*((uint*)b); return c>d?1:c<d?-1:0;
}

void rleFrPoly( RLE *R, const double *xy, siz k, siz h, siz w ) {
  /* upsample and get discrete points densely along entire boundary */
  siz j, m=0; double scale=5; int *x, *y, *u, *v; uint *a, *b;
  x=malloc(sizeof(int)*(k+1)); y=malloc(sizeof(int)*(k+1));
  for(j=0; j<k; j++) x[j]=(int)(scale*xy[j*2+0]+.5); x[k]=x[0];
  for(j=0; j<k; j++) y[j]=(int)(scale*xy[j*2+1]+.5); y[k]=y[0];
  for(j=0; j<k; j++) m+=umax(abs(x[j]-x[j+1]),abs(y[j]-y[j+1]))+1;
  u=malloc(sizeof(int)*m); v=malloc(sizeof(int)*m); m=0;
  for( j=0; j<k; j++ ) {
    int xs=x[j], xe=x[j+1], ys=y[j], ye=y[j+1], dx, dy, t, d;
    int flip; double s; dx=abs(xe-xs); dy=abs(ys-ye);
    flip = (dx>=dy && xs>xe) || (dx<dy && ys>ye);
    if(flip) { t=xs; xs=xe; xe=t; t=ys; ys=ye; ye=t; }
    s = dx>=dy ? (double)(ye-ys)/dx : (double)(xe-xs)/dy;
    if(dx>=dy) for( d=0; d<=dx; d++ ) {
      t=flip?dx-d:d; u[m]=t+xs; v[m]=(int)(ys+s*t+.5); m++;
    } else for( d=0; d<=dy; d++ ) {
      t=flip?dy-d:d; v[m]=t+ys; u[m]=(int)(xs+s*t+.5); m++;
    }
  }
  /* get points along y-boundary and downsample */
  free(x); free(y); k=m; m=0; double xd, yd;
  x=malloc(sizeof(int)*k); y=malloc(sizeof(int)*k);
  for( j=1; j<k; j++ ) if(u[j]!=u[j-1]) {
    xd=(double)(u[j]<u[j-1]?u[j]:u[j]-1); xd=(xd+.5)/scale-.5;
    if( floor(xd)!=xd || xd<0 || xd>w-1 ) continue;
    yd=(double)(v[j]<v[j-1]?v[j]:v[j-1]); yd=(yd+.5)/scale-.5;
    if(yd<0) yd=0; else if(yd>h) yd=h; yd=ceil(yd);
    x[m]=(int) xd; y[m]=(int) yd; m++;
  }
  /* compute rle encoding given y-boundary points */
  k=m; a=malloc(sizeof(uint)*(k+1));
  for( j=0; j<k; j++ ) a[j]=(uint)(x[j]*(int)(h)+y[j]);
  a[k++]=(uint)(h*w); free(u); free(v); free(x); free(y);
  qsort(a,k,sizeof(uint),uintCompare); uint p=0;
  for( j=0; j<k; j++ ) { uint t=a[j]; a[j]-=p; p=t; }
  b=malloc(sizeof(uint)*k); j=m=0; b[m++]=a[j++];
  while(j<k) if(a[j]>0) b[m++]=a[j++]; else {
    j++; if(j<k) b[m-1]+=a[j++]; }
  rleInit(R,h,w,m,b); free(a); free(b);
}

char* rleToString( const RLE *R ) {
  /* Similar to LEB128 but using 6 bits/char and ascii chars 48-111. */
  siz i, m=R->m, p=0; long x; int more;
  char *s=malloc(sizeof(char)*m*6);
  for( i=0; i<m; i++ ) {
    x=(long) R->cnts[i]; if(i>2) x-=(long) R->cnts[i-2]; more=1;
    while( more ) {
      char c=x & 0x1f; x >>= 5; more=(c & 0x10) ? x!=-1 : x!=0;
      if(more) c |= 0x20; c+=48; s[p++]=c;
    }
  }
  s[p]=0; return s;
}

void rleFrString( RLE *R, char *s, siz h, siz w ) {
  siz m=0, p=0, k; long x; int more; uint *cnts;
  while( s[m] ) m++; cnts=malloc(sizeof(uint)*m); m=0;
  while( s[p] ) {
    x=0; k=0; more=1;
    while( more ) {
      char c=s[p]-48; x |= (c & 0x1f) << 5*k;
      more = c & 0x20; p++; k++;
      if(!more && (c & 0x10)) x |= -1 << 5*k;
    }
    if(m>2) x+=(long) cnts[m-2]; cnts[m++]=(uint) x;
  }
  rleInit(R,h,w,m,cnts); free(cnts);
}


================================================
FILE: code/cocoapi/pycocotools/common/maskApi.h
================================================
/**************************************************************************
* Microsoft COCO Toolbox.      version 2.0
* Data, paper, and tutorials available at:  http://mscoco.org/
* Code written by Piotr Dollar and Tsung-Yi Lin, 2015.
* Licensed under the Simplified BSD License [see coco/license.txt]
**************************************************************************/
#pragma once

typedef unsigned int uint;
typedef unsigned long siz;
typedef unsigned char byte;
typedef double* BB;
typedef struct { siz h, w, m; uint *cnts; } RLE;

/* Initialize/destroy RLE. */
void rleInit( RLE *R, siz h, siz w, siz m, uint *cnts );
void rleFree( RLE *R );

/* Initialize/destroy RLE array. */
void rlesInit( RLE **R, siz n );
void rlesFree( RLE **R, siz n );

/* Encode binary masks using RLE. */
void rleEncode( RLE *R, const byte *mask, siz h, siz w, siz n );

/* Decode binary masks encoded via RLE. */
void rleDecode( const RLE *R, byte *mask, siz n );

/* Compute union or intersection of encoded masks. */
void rleMerge( const RLE *R, RLE *M, siz n, int intersect );

/* Compute area of encoded masks. */
void rleArea( const RLE *R, siz n, uint *a );

/* Compute intersection over union between masks. */
void rleIou( RLE *dt, RLE *gt, siz m, siz n, byte *iscrowd, double *o );

/* Compute non-maximum suppression between bounding masks */
void rleNms( RLE *dt, siz n, uint *keep, double thr );

/* Compute intersection over union between bounding boxes. */
void bbIou( BB dt, BB gt, siz m, siz n, byte *iscrowd, double *o );

/* Compute non-maximum suppression between bounding boxes */
void bbNms( BB dt, siz n, uint *keep, double thr );

/* Get bounding boxes surrounding encoded masks. */
void rleToBbox( const RLE *R, BB bb, siz n );

/* Convert bounding boxes to encoded masks. */
void rleFrBbox( RLE *R, const BB bb, siz h, siz w, siz n );

/* Convert polygon to encoded mask. */
void rleFrPoly( RLE *R, const double *xy, siz k, siz h, siz w );

/* Get compressed string representation of encoded mask. */
char* rleToString( const RLE *R );

/* Convert from compressed string representation of encoded mask. */
void rleFrString( RLE *R, char *s, siz h, siz w );


================================================
FILE: code/cocoapi/pycocotools/pycocoDemo.ipynb
================================================
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "from pycocotools.coco import COCO\n",
    "import numpy as np\n",
    "import skimage.io as io\n",
    "import matplotlib.pyplot as plt\n",
    "import pylab\n",
    "pylab.rcParams['figure.figsize'] = (8.0, 10.0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "dataDir='..'\n",
    "dataType='val2017'\n",
    "annFile='{}/annotations/instances_{}.json'.format(dataDir,dataType)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loading annotations into memory...\n",
      "Done (t=0.81s)\n",
      "creating index...\n",
      "index created!\n"
     ]
    }
   ],
   "source": [
    "# initialize COCO api for instance annotations\n",
    "coco=COCO(annFile)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "COCO categories: \n",
      "person bicycle car motorcycle airplane bus train truck boat traffic light fire hydrant stop sign parking meter bench bird cat dog horse sheep cow elephant bear zebra giraffe backpack umbrella handbag tie suitcase frisbee skis snowboard sports ball kite baseball bat baseball glove skateboard surfboard tennis racket bottle wine glass cup fork knife spoon bowl banana apple sandwich orange broccoli carrot hot dog pizza donut cake chair couch potted plant bed dining table toilet tv laptop mouse remote keyboard cell phone microwave oven toaster sink refrigerator book clock vase scissors teddy bear hair drier toothbrush\n",
      "\n",
      "COCO supercategories: \n",
      "outdoor food indoor appliance sports person animal vehicle furniture accessory electronic kitchen\n"
     ]
    }
   ],
   "source": [
    "# display COCO categories and supercategories\n",
    "cats = coco.loadCats(coco.getCatIds())\n",
    "nms=[cat['name'] for cat in cats]\n",
    "print('COCO categories: \\n{}\\n'.format(' '.join(nms)))\n",
    "\n",
    "nms = set([cat['supercategory'] for cat in cats])\n",
    "print('COCO supercategories: \\n{}'.format(' '.join(nms)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# get all images containing given categories, select one at random\n",
    "catIds = coco.getCatIds(catNms=['person','dog','skateboard']);\n",
    "imgIds = coco.getImgIds(catIds=catIds );\n",
    "imgIds = coco.getImgIds(imgIds = [324158])\n",
    "img = coco.loadImgs(imgIds[np.random.randint(0,len(imgIds))])[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfAAAAFNCAYAAAD/+D1NAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXmUHNd93/u5t6p6n31fgMFgB7GDIMB9k0RRKy1FuxRF\nSuIlkt97SezYVpKX0E7i46enZ1t+ii3Hsi3bkixL1EJR3ERS3EESxEIAJNbBzACYfemZnum9qu59\nf9yq7p7BgJaP3zkRc+Z3Tp3urq66det3b/2W7+93fyW01qzSKq3SKq3SKq3SW4vk/+wOrNIqrdIq\nrdIqrdI/nFYV+Cqt0iqt0iqt0luQVhX4Kq3SKq3SKq3SW5BWFfgqrdIqrdIqrdJbkFYV+Cqt0iqt\n0iqt0luQVhX4Kq3SKq3SKq3SW5BWFfgqrdIqrdIqrdJbkFYV+Cqt0iqt0iqt0luQVhX4Kq3SKq3S\nKq3SW5BWFfgqrdIqrdIqrdJbkOz/2R0AOJ9BFwpFJibGaGlqJR5PorWPkJqIZSEtiDo2vldGKYVl\nOXi+wHXdShtCiCWfWoGQYAmQlkILjdBgI7CFxLIsLKmQQl91rtQ17WiN1tVjNB6WZeG6Lo7jYNs2\nSnkIIfA8858QAt/3UUphS8t0UApE0K7WGoVGCbC1wNeqci0fgVYStETjV/ugzHm1VOmvdTUPao8t\nlUokEolK/8J7qm1HCLBltY3lpFS1j0opVGD7hc3UtqfVsrEI/lNKBdcyW8grpUDpctAvBQTniZB1\ndqXPvgaFhYfAVxLf96vXDcZJB9fSykMj8dFoBCDRUqC1QAh9Fa+0DvutATMGZoeq3o8WSOWhBUis\npfctwKfan+V0Ld4u599KvLv2+RIZzB+JQGgftEJKsIQ0Y6rN2IIG7VfaFNJe0qZWaoV5IdDar/Bl\neb8kAillZV/t/9eajyuVb9YCUNUxCY/T4upnMbxvrQXBrVfnGObT16JyvNY6mK2q0l8hqv1W2sey\nrMq1Pc88z8rXlWe9XDbzM5FI4CkfLUVlPvu+jxACRzrmvpVEGG6be5eKxfwiwhI4dgRRKOM4NvFY\nhB898ACnTp3i3ve/m4sXh9i+cweJRILS4gJf/OIX+YWPfJTb7no7Lz39BA/+8Lu88563MzU1RSza\nTn//eiynxLHjL/P6sTNIDz728Q9y+txrLOZz3LDjVh77yaPEE1GmZ6e4btdOnGgSRIQ9ew/yzDM/\n5eMf+whr1vTwJ1/9Cjt27GBmOo20LW666WbODlxkLrPIts3bSNbV40lJvljCEpKJqUnW9PXheiVm\nJsbZu3M7Nprc4gINKYe/+tpf8/zRo3z1j/8UWSzx/AvP8PILz7JYzvLBj36SxuZ25scnOHf6NRp7\n+1EiRn5hjr6eLpyIxZNPPU1f/0Y+8YlP8IO/+XP+4i+/RmdvH+9417tZv2ETMzOztHd2k0g24PoK\nOxbDkj5tTfV8+y/+hD/+0hf5T7/zXxhNL/KnX/tzPvmxTxKzHN79gfdy5fIoD/7gQQ7edhsb1/eR\nSjbxO5/7EH59jD/4i4dINaxnemKSpx77Ni+/8Di7tu/i1eNnueNt7+SmgzdjWVAuLdDU2MLpc2fp\n6+snly0ws7BI34aNxGMpPN+lubmRRCLF7Eway7KIRqNkFzKs6+rgtcOv8E8+dB9Fd+HaQuFnIOv+\n++//x5z//wtdXnDvtyNRWtuamJ1N01BfTyRioZTC90rEIg5oH8eS2JZEeT5aC6K2jWNZOJZFxLZw\nLFHZLEcQkQJLaixLIC2BY0ksKbClQKCxhNkvpQge6OAzUGhah4Kbyv+2beH75oH3PA+tNbbtALoi\nqLTWSCnNJgJhIYywkEGDQgbXQVQedCOoAptKG2WBCIVWVfEtEeRCrbwfo/hc1yMej1Eul4P+WEbw\nabXkePNf0OQ1FE2tQBZGshIq26WCfem+mh5V+FT7n1LGoNEow49AcKMlaIEWEqWNglFaowLeKKUR\naKQQSIHhpwQpMPuDe5JCYgkBwvRACiPQJcFxgNAaoRUCFXwP2gtUv9kfzBtCRQMS0weNNmNVM5bL\nt5VIahBIEKx8rDRz5NrKX6Ar/Qw+BYbPld8KS8hgXksznzUIIZESpBSgFVqH81wGGjVUQ9X7rYx/\nuC0b56sM6WXGYkhVoyn4X1CxBpecUzEijOFo/hMV5V2rpLXWqPATVbEAtQ7GpcKPapsimBfLlbEx\nms01bdumWCxSLBaJRCJozNxQwRxTSmGLYG5rYfhoQalUxLING7WvyOaypJIpJq6MEIvFmJudQ2g4\nevwosWiMmw7eyMWLF/E9j3x2kZ6eHi4OD7Nn3z6E6/Ltb32HO26/h1isgXe+5/1EokkikQhtrWuZ\nnZnm2PEjbNqyhbn5eaLxBPFIkmx2loamFBMTI2hdpqG+jt27drJp00Zy2SJ/9rX/wU033cjmLZv4\nr//1d9h3/R66Ojt55pmfMjUzQ0dbJ76rSKQamcsXSTU20djSzsJinvqGBk6eOIElJN1dXUxNTjE3\nl2YunWb9+o2s37yFb33zW6xbs4br9+3lxw89yOzcPMdPvM7BAwdpb2lhamKUS2NTNDa109e3jtHx\nCabnM9z6trtpbO/EdTUR4bBr0w62bt/J1//mb/BUkb17dnDk1Ze5+c7b6Vm/hsVckYamJhYWcuiy\nx+EXX2Df/n28cvhVko2tfPaTn+C5p59k69ZNHDl6hDvvuJud+/Zy7OwF6prbuHT6GKPpGW66617m\nFwq0tLewdWsfUxOXee6Z5/jCf/jPrN+4GSkks3OzNDXVc/KNN9i1dy9da3pJNTSwWCjS2NxIxIlR\nX1+HWyxiS0kkFiU9Pw+2RV3cIiLgD/7v3+PKlWF+4wv/7rev8WD/TPRzAaHXxR2EX8Yrlli7povR\nK0OUSzkSMYeIBZbURB2JVmVsfOIRi5gjiEZkZXNscGwRbJqYLXFsHZyvcIQR3JbQoAJhLY2wE1IH\n31cWlLUCSylVsdwjkQi+75PP51HqakEmpVEcdmDxW6HHjBGgEOhoYQXnysq55ouq6YRa8l8o0EIK\nvdeKh6wUnl8mErXxPI9SqYTnefjKW+rZryA0awXiVbyoEfLX4tXSPlXbFEYrgjTCz9cK1/dw/TKe\n0igffAVKC/Ndg0LgKfC1Nl53jWdllLCqbAiDqEihsS2BbQkcW1a2iC2I2IKoLYhYrLg5UiODdoRW\nQLgBqGDczLUMHxVa+5XvbzZ/ViIlQNWOcw3plU+5Ji3xnmuHTsuq1y10xQuVaGOAaBV472rJeVpr\nlG/QiGsp5Frv+s0Qhjfrr9Ya7SuWK2MdGFKWqHr4SxW56ZtSXLV/OWK1fG6H9xkq7vD78vvTWlMq\nlXAch1wuV/HUayncZ871UbpMqVQgnZ7B81181yPqRJifToPrM5vJMDIxQTSVoH/TZj77z3+JZ59+\njsmJCaK2Q1NDHRMTE7S0tXLx4kUGBwc5f/4cO3fvZPeefdQ3tFIsF8hkMlwaHuHylRl2793H5q0b\neO65Z7g4OIwUFuMTU5S0z449u9l03SYOH3uF4UsXGB0Z4ve/9LsI32P39uv4yv/7RxTzOQ7ecIBj\nR45iCfBdj4bmJlq7uvCFTSxRR31DC4WST7nkUcgVyS/kKC3kuX7P9aTTGc5fGETaMRZzZSbTCzQ2\nNHPwphv5w6/8Ef/hP/9HGlqb2bpxA4MXzvPG6yf58UMP4jgOfX19LC4uMjw2Tk9fP8n6JnIFl9bW\nNh5/4ieIaBwrkqKnu48vffH3Ua7gL/7yb5DRBP/nb/8n/uZvv0GqIcXA+Ys4Mk5LcyfX33CAL33p\nS5y98Dq5Qp5cySVV38xzL7zM3Xe/vYKOrlm7gab2brKeJj2XYX4+TWtTHempCWLJBJs2b+HYiRNs\n3ryZ3t5eurs7qUslKBRKbN68mZGxURayi7z8yivs2LGDyclJPKU5e/Ys8/PzZDIZCoUCTizK5Mw0\nEoPwHD16gs1bdv2DnpeV6OfCA/dK2fuTlqIhZhETHuvWtJJMOMxOjZLPLVJfFyfqSCxA+R7adw20\njofER2qNJTxsobGlwrEUtvSxpcaWAiuA0s0msAJFLqUGqQIPG6MkBQh849lKjbQCBS904O3KykOv\ntSYSiRCJ2JTLRkECS5SbpYVpNoTQVQ3UK2o9VmNMmH0CXVEaGhVCizX2VsV70KGXZByYUHkbFKDq\nUdi2jWVJCoUCWqsKfF3tq4YaKH+58q1clxCqFFcJu+q5S4Vt2J+y8nC1j6t8yr6Hq1187eNpH6Ut\nfG2Utesryp7C8zWer3E9D89T+KqWFxqBClAT0zPjQQdwqVYorYK5YZSyLcFCYQuBIwW2AMeCiCVw\nJNXNkjjCwrIkVmhzoM13NEo4GKTEAmGhsQEbLa0VYeblYZirqRo2qCWx4t7lpJGhAg34AiAtCyEJ\nvGqDEEghsGRg1EQkEctA7FaIWAThB4L5IKVBnXQAuwtRnduVuYNYYkia05f2ujLflynGJfPMaOGK\nB72cZ0JWjaDa5k2bNe1oAoTGIDWhUWsF/ZWhMR5A4JZlUS67SMvcV6lUwrIs8vk8lrQq92pZFrZt\n47ouSoKwQvjdwOyBmRMgKQrLEli2ZGZmlsaGBmKOQ6lQxC2ViDY0sGbdOiamppmYnkQrzb3vuJcT\nJ49y/LVXyWczdHR1IuwYO3bs5uFHHqM+mUTj8sAD36WxsY75+UtMTQ4zOTHMrp1bOfTi0+QLRe66\n41527TxINJLiytQAJTfK66fPU59q4sD+G4nZcR556BHqYkl279uD75X45Mc/zCM/+gH7du+kv7+P\nb37jr3nve99De+c6XCmpa2rm0tgY0rIoLixSZ0Vws9M89eiDdLU3Mjc/S8kts2PHduKxKJlsmbY1\nPWTmF9h//S6I2Hz+c7/C3n17OfXKYfo3beQ///Zv49g24+MTfPaXf5mOjjYOvfwyjm2TjER49MEf\ncfjFF9m6eROJpjpEWx3pfA5XCfr6d3D3PfeRmS9y9KWj3LLvIN/9zndJj1/h0sXTRESZ9MwEI+MT\ntPdu4G233UCyvpnuvk1kXMXOfTdT39zFwOVxOhsawbKxS1mefvanbOjv5+a9Bzn09HMcee0og+ff\nwNKCXXsOMDo+ztjoGJnMLNn0PCdfO8HoyDhNqSYi0iaZSNHZ3oGvNd3d3XjKI56sw3YcFnNZ6uuS\nbF7Xzi/+y89y/I2TPH/0KPVx+x/lgf98KHDh3x+LRdGeIha1KZUL+J5HQ30jjm2Rnp3BloJEIo5W\nPrZjBUo0aKASzyTwVBUWoZAHpRVVEC3wgIUwXpMQgdANlWPgoa/gNYVerm1baG0sb6UUvu8RjUYB\n8H2/Epe1pWXg2BBS1tVLBDIm6FdVsClAq5oDhUIrHaCLV4tzg3TKEA82rWlp7ieA8rXWCCw83yMW\ni1MqlZbC4SGcGBoC0hgXCgNlhz3UhglBz66OyVfj5FcrLxO/VvjK2AlKG4879JQ0VuU+ldL4voHL\nDZmbU0IYfgqBVaNIll+nyhsdhAWM10mA1FbDIzrorFEeWvmgNZaQYWDDNCRCw0AHcwWQCik1EoXA\nRwsf8LEIYHVdhemN0QhCCaSWSC2qcC4q8LSXKn0rmDU/yxaSCO65Mt8wRorpg4F9LSFwLDM3qSAM\nVSOSAFI2IRbDuypPlz4XxoBcGcWpjMEKXvBK46W0yQmpnWuBag5NEgP1V9qpMVyFHxgp5nihzfxE\nqyC8Yp5xKY3iFtKMruf7hI+V5xvju1Qu47oelpTksjkikQi2bZPL5Zifn6euro5cNkssEjWoRWAk\n20JWDGDbthDCwvcVnucxcPYsHe0tLCzMoW0bJxrBy+ZpSKUYvjTEYj5LemaWeMLhjddPAB69a9aR\nSNWzZm0/585f4KePP8mBG3aTXZilvaWViakrdHd1MTc3S2Y+h9KC9Rs2ceilF0kkk0zOzDCXnceW\ncXp7eslkFtiyaSv1DY1s2LSFqdk5rFgcDRw7cpj84gKnThxn53XbGBocIBmP0tmzxhgz2SxR22bw\n4iDK94jZDgrF0OAgm7dsZN8NB1nI5bg0fInhoUGaGhtpaW/FQjE3M4sdcZgen+L5Z1+kVCiyY/8N\nvPv9v8DA8CUeefQx5udnufXmm5ibnuSWGw/Q0NjIjh3bGRkZ5ccP/4hPferTHDt+hL6+NbS0tbNt\n23bSs3Okkik++KEP8id/+if85df+iKHhYcYnxjlz5iQXz5/Bsixy2QJz2TK//hu/xeDQIEdfO86/\n/MV/ysiVCbQl0W6e+tZmrGyG4QtnKJVdYvE6tm7bwXe//XXW93ZSl0jSt2EL03MZdu/ai+f7uOUi\nuXyeRDyBQFAslZG2Q2NLE17ZJRaPgRQUXZeZdBoLge8WSY9f5Au/9Zv861/7dW65+27qHPnWV+BF\n5d2vlQYh0cpHofCVwC27JFIJ4vE483Np8oUsdakUvq9MbFn7gWCVlQfVkrV+qhFE5mE2gtfSMhBv\nyni5IhRKBIK1SstjkrUwuhDg+yoQDLJizVcSYwKPwrEstFJIS4KuxsC1MEIrFE8hKVjiVSN0JVGn\nNqZXub/wdxCzXCI/tUAKC+WbuKGUklKpTCKRpFgqLLk/E3cODB6uFsqVLbymqvajNkZpzlmqwEPy\nfQ1aGoNDiwBREAglDFBtTjReuw6hW2OAqACtML5q2Laq/h94+UtMHBEq7EBRh0ZcZUyN8loS+gjR\nFh0cE4ZZAkTGEhosZXIrpEZKhRA+4KGFh6XtwEgUlbizJSSWlOBXlbI01lBgEGhjHgS8CpMohV5Z\nYS9R3sJwpGIcisCTDsbLFgIbK+gH2CgsKbCgBuUxvPSVNrkGCKQMnp0lIRMq413D4iW0Uthlpbmw\nnJSxqkEIlBToakJGaJlUFHiIGIXxfPMcU4lvh4amrkERapGD0HjTUlSUuOXYFEslYok4V0ZHiUUi\nRCNRRkdHSaVSlXBZU1MTM9MzpJLJijFbLBRwLNs850Lgep4xzXwfWwpyuQUuXx7ELebwpGRNdw/l\nzCIDZ0+zbkM/4xNjlL0ibjFHLObguWW6u9fQ3NpJPJ6kd80aDj3zY2LRMnXJCJs3bqa7dz1dHevZ\ns+cmZmcX2LxpG0eOHmZ0bAjbgbHxaW66/W6uv/UOUo3NbL5uB3lPUVSSnftvJNncTjaXobm5mfX9\naxm+OMB8eprzZ96gqbGeoYsXqG9uw7YEquQyl55j/Yb1zEzNkkokKHmS6ZlZbrntVqZmM8zOLtDS\n2Ey5WCZVF2V4ZBgvl2dhbh6NYGZimvXr1hONxSlqwZ33vJMd23fyoQ98gF/7N/+anz71E0aGB7nx\nxoPkCkUGh4d557vfzfvf+36effppWpJ1xONxEvUJ0vNzjI+N09PTg3IEn/qXn+S+e+/lffd9kA9+\n5GM89NDD7Ny6kTMnX8MSio/+yhdIJZIMnH0Dy/JJT08xenkY13dJ1adINtbR6Ps8+fjDnHzjNP/k\no5/k7OAwDVG485YbeOzRJ9i6Yy/dfespe9CzppeN69aybt162rs6OXnqddav30BzezujExO0t7aQ\nnp+jqbWNkdFxPM+js70dx9J856//kldeOcIXv/RlisKhqzHxj1LgPxcxcO0H0K/2cJWPUgRxTCgX\n8kQsSUd7O0JLpqdnjcDWHp5Wxlu0NEoqwoSu5SSUj9RGMGp8FD6+VghhIbVEKAF+NQa2JJa2wm8w\nwsiyahWqwlU+wrawIg5KQNlz0dpH2gLluwgLXO3h4RmFVQMvm3ZEhQ86gPGXx7mN2RFmsftL4Hzf\n968SliEaIIJkOMdx8DyPWCyG1ppisVjNIlYCxVKFGFKYVa+1X+3jMpg8vK7hsa548OEnwkKJqpEh\nVOCZS3PvICsx8HBqVjLXlUYojRV4/r5SKDSe7+MrVeOxVeOlKK8CaWtRjZVW54hcMqbSMhCxVgIt\nFBoPqRUWGltIbCGDvAaTTGkFisGSDraMEiWKIyFiWTi2hSMlUVuScDSJiCIWhWhUYDuArbAtE+aR\niOAageddkw8hWQpPXzW3ARHE5MM8CR+NEgaxUGEWfph9HqArHlTCNUqb1DwsiZBmLod8kjIwgGr6\nEY53xWhaAQlZHk8Oc0euFUsPjTQ/9LelrBjEtrRwLGkMmtC4CbxqyxKV48Jzws2xbGxsE8YKzvUU\nJltBUFmVUSwWWVzMEo8nKJddent7mZydJRqP0dLSwqVLl9Ba09zaQqlUwnVdXNc1c8VXaF+Z/Z6Z\n91KYmLgVZPmvW7eOulQ9s/MZpmbmUJ7PzEKagu+ymJlj9/bryM5nSM9O09HUwomXD/PkU08xPHaZ\nl199hZaGBj7/r36VRx56lG3X7WHr7gO8fuYC7b3dnL88Ck6c9p42du3explTp3nH2+5B6wK+r5ka\nvUJDXYp8vojGYu+efUxOTNHX10ckluLyyDh2JMUv/tK/4p5730tdQyOLiznmMjlaGpOMXr7EsSOv\ncP7MCfK5eXbt3cV8vkAsYnICRsbGyS/maW1oZmRkhEjM4dChQxx/+VUKpSJ1dXVIX3P9/v2kM/O8\nceEcff0bKJd8pmfztLT2cfbsWfr617Awv8hv/rt/w2/+2q8yMniR5lSMK8PnePKxZzn8yiu8+spL\nHDr0Ao8/+jCXBi8yMzHJA9/4W774O7/H2dfP8d+//EecOn6MT37iU8yk53nPe97Ntm07OXXqOIde\nfJpt2zawuJBleHg4kN8u/f39DJ0d4OSZCyxkS7S1tbFmfR/f/s53iEbjZOYXmZ64RCE7S1dXB61t\n9eSLBS4MDVNQHlcmJ3nXB+4j3tqIh8DCYmo+zfT0LAPnLhJPRNi4eQuJujrKKseRV46wfdsuZmfn\nOXz48Js+2z8L/Vx44LlS6f6VIFCoendCCBobG9Fak06naWhoqEDYEMTmCGHcpV5VCLktTzKrxH65\nWqAsh9Brvc3lZPpnBLvnuiitiTkRLMuiVCwghcQOFKe0jXApu15woWobWiv0CtcMEF50TRyxGvur\n8mi58hbL26n5VMonkUjg+z65XI5IxKmgC5YtK6jC8vhm6JWZH0v7Gh6rauDnJYaQFpX7C73lMLiB\nFiuO/1IeV+6IMN65lKpL27Q2Ctl0qRqvrVUoV0GxIaIuTFsGIl7KQwARzLWKNx3CtAG4IEMFb5uY\nurRMglhFGcogXKGMiy2DLPSlo2Ygdn2Vj7uMxMr8CskCs6RMYnI+oLraIIhfa00F4dCCSq7Fm40H\nBM/Isv4tfz6Wx77Ddq86VgokYknintDB0rgAqq8eapgVxssFBOGXcDzDMQ14KExjGhPGMYawCiIG\nZm54nkcmkyEajRKJRJifnye7uEgqmcJxHIrFIrZlUSgUmJmZIZlMVleaSJNb4rousVgUX/mAoFgq\n4rplisUC2ewCuWwO24nS1tTI8NCQSX71FONXRohFIixm5rGEprG+jgM33sT05BS2ZSEtSVNDM2fP\nvs7adWsQjsMrrx5j754DPPTIk2zfsYdCIcuxVw9TLLmUyx7RaIKNW3bS3tlGqVjixImTXHfdVnLZ\nHK5yicXjzGQyZHN5zp4/x/OHXmTTtk00NDVz4uTrbLtuOw88/DDves976O3tZXEhSzqdpb9vPbby\n0VLR0trIK4cP09e/gctXRujq7CAadUinp2ltbWX7ddfxxBNPcdsddzB4cRDbdujs6ebi0GU2bd7K\nhfODWMLmtWNHWb9pC6lolJHRK8Rjca5cGeHllw5hW5p/+onP8L3vfZf+/nU0NzbS091DMV/kyLHj\n7D94gMVilq/8P3/Aow8/yiOPP0pbYyO33bif2ekJZtMLvP8Tn+bMG2/wtrvuYnI6Q0NDKwcP3M7h\nIyepTzWybccOrpw/wfCFk8wvpCmUNVfGZrlx/07mZifp7u1hsVikvXcNSvnMz88zl8mQrKsn2dDA\n66dPs/eGA6Ak0rbJLmRYXMwyPjVNS3MTylfMzczQmnT491/4Lf7i63/NwVtuw3IirO1oeutD6Lly\n6X5YWTk6jkOpVArg3xKxWIy6ujqmp6crD5FSCqHCpVvVc2s9rdrfS5Xz1QLqZ82mXS6cwuVlUoiK\ngrCCZWcq8H5L5RI+GtuxgqSsqudqenO1IvO1bzTDsjhprVGy3PhYfmvLlbi0RMVjj8fjFQ9eSF1J\nfKs1nqqevqIKkV997aADVykB45nLJUZIKGY1esl63r9PaWhdvbnqmF6dHRxCruFxYnl/KjwxvQk/\nRZC8VIHRqc4ZIQz8LLTC0kECmTZxb60M7mBSEhRCKCwJQvho7SGkjw69WW0yrwUyWPZmlLgUIliu\ntpRqld6S+XkNBV5JNBOGD5ZlvGkJ4Vo6VIBkLLHH9NXjVuX71XNMcK3n6up5sRIvl8PxWutq6CD0\nuJcZg5XvBu83qIUOjNnA7CH8lAZ1C+etr02iHAIsaVW8cMdxzMoNz0NKSTweZ3Z6Bs91iUdjaCCf\nzxONRikWixU0KxKJUC6XKRaLAFy+fIlYLEYkEkFKiet6jIyOkp6eY3xyAq9YRPkeMzOzbNi4mZ7u\nXi4ODGBZklQqST6bxfNK2FozOz1FXX0ds3OzKFVmeGiY8clZOnv7OHrkdSanp+no6mBtXz/Z3Cw/\neOBbrO/rZX5uhg9+6IO4WpJOz9Pa2srw8BB1dXV0dXUwMztLZiFLfbyBhro6Rq4MUy4WGblyiVMn\nTpCIJ2ioq2d6LoMlJa0tjbiuoqm9h5bWNizH48ixVxm/PIwlHdas62ddfz+xiEMmPcvsbJoNGzaR\nW8zT17eOxcUs8wuLdHR109nRQa5QYGp6hq1br6MuVc9rJ07yjne9m/aWRu5+29uZnZlF+5odO7Zx\n6IUXiMfi3HTnbYyOXGHo4gWU64G22LJ5C9lsDuV5TE1Nc8cdd/LqkVe49eCN3LD3Oh74zrcZuDhM\n27qtxByLjtZmxibGGRi8wMc+/mGidUlGR0coa82ezZs4/PzTeOUSR0+c4s577iXuSF5+8UVGRq+Q\nd13qW5uYmJhkcSHP/htvJJFKMZueJ190Wdu3npLrIW2bqYkJtl23g6Lr0hCLsJDNUSossn9zP9/+\n3g/5L78IAhC4AAAgAElEQVT7fzG3sICFoKOl7q2vwAuue/+1PNuwYIqBPExRhTDePD09jWVZxONx\nhJRBIYiVBNrV3nfNVa7av/zz76OVPIpQ8dm2BUGsreSWcSIRAFzPo+pt1RYvWVlYVbLUll13pWS7\nirDV176HMDs3PD+TyeA4TpC5XL1u6KGExknV+1625M3sRAhp4pYrxuvlEoShosBVeH/V/i+/n9rv\nYc5C7e/QqKjtc+2yLpOTcG1lU+v5+soP8gauVvZCCCyhgpCMCnShuRMdJIVJESTE4YHQCOWb3I4A\nHdImrmDCArLmXpDVBKwl91pVnrLGQjX3yopUNeK0KWgUrF00HmngtSJRynj5mioPw7aXz+sVw1OV\n61nUohnh8bXIybV5b06rxR6kEBXvO/Rywz6FT4IAk8wYKvxgp6ygGaE8UBAUKdIIc2DQVa11xYNO\nJBIsLi5y6dIlmpub8T2PYqFIMpEgkUwyMzODV3Zpa29nbm6O5ubmilORzWapr69nZmaaeDxOKpkM\nlnIq4tEETU0tPPLjR2htSFEo5EjUpejpW0fZM3H19o4Ortu6i2R9PVpDenyCo0eO4fmK9p5umhqS\njFwa4/kXXuLmW+9gemKapqYm7nrb7ZRKLi8f+in4BWanJ9m7ayeRqE2iroH6hhZisRgDAwNs2bKF\n+bk5orEodfUN9HT1sLa3i5b6JHffehPjly7z5OOPs//6/aTn57hu63Yunj+HJTy2bN3B+PQCFwcH\naWqO89STT7Jp/Xqu27EXO5akUCozMzNNW0MzxVKR1tY2pqZnaG5qRinF3uv3s5jNceH8BeYWMuzZ\nuwfbdnBdl5a2NhazCwycO8/b73knPV1rSCaS/OjBh7h+334mJsb43o9+QCGXZX5mmh3bd7Jjxy7a\ne3rpX7+B3rVruTQ2RckvozX89InH2L6pn/PnzhBL1PGpX/lVRi4Nc+HCWXrWruHpZ59mw8atLJYK\n3LBvHy8fPc7bb7uFJx78Po7QXH/gRj76mX/Gxr517N25i9OnT9O7ro9UUzO7d95ALJpidGycQrGE\nbUfILGRJJBPYkRjSspBA0XXxhaS8mAEpWL9+LemBCxStKL3rN3D+wkWaU010tP8voMBDD7yWagVW\nKARqK53FYjESiQRzc3MUCgWTBS4FylNYlqnSVH3Ml9LPqsCvPhaqWbtVDzQkS8hK5nQodJQyUT0Z\nVEArBQVVTJZqGJ+uJjAtz+4WQhh8U4hAAC+N29by6qrfK3jgVY9dLQlBhJ6FlBaWXY0/1wrgaruh\nErnG+mZlMuA1S5WfL5YaIYIqDIqoGgRvJuhrkZOlBlPtPQZLnqxqHFUEMHdtomHYiyXsq/FAl19X\nWsK0qU1Wty1NcpoZ6yDxCx0sO/MrBWWM4tABX6zA6zZeY8inyk28CXS+kkL/+xS4MmYTCLPGW2sf\n7WuToSAslFZXebihF1w7xa/lWVdGI8zq5+rjV+pX7fWWjDdB4R1ZjWvbUhoDfdk1lxdLqmpxc5BZ\nWRJCO+Y/HYRGwjYikQilUskUaNGaZDJJKpUik8mY4iuZBVpbW3EiDolEgrNnziCkIJFI0NDQgO/7\nOBEbz/eQlqSzs5OBgQHaW9sQQlAolBHCxpYW+/ft58XnnqKnt4tkYwNNbR1MpedYyGcZm5jAtjTp\n+VmSdUneOHmMD33oPo6/fpRsYYH52Syd7e3s2rGDucw0p147QX1dPR/9yMd54rHHKecWaGuqY2F2\njp07dnLp8mU6OtaCtMksZLBtm127dlFfX0c0EjHPuiMYHx3itSMv09PRygvPPkNfXx95v8Rrr5/i\nPe9+Fx0dbfzVn/8ZGzZsYV3fZjy3zJmTr1L2POrrmkimmlEIEql6tO/x5E+eIF/K07euH8e2icZi\nWLbN7OwsM+k54vE4Fy6ew7EtSuUiU9NTbNq8nhdfep7Gpk6y2RLSjtDe1s6+G/aTyWRp62jjlz/z\nz7hu4ya62zr4gz/4Mjfefhv1Lc3Mlwsslors3LWf3rVruOXmgzz9xBMUs/Ok6uL84MEf87b3vo9U\nvIHRkTFuvvUuHDvO/FyBzq41pFJNNLW2Mz99hUJ6ghef+Sk79h3gpjveyfPPPsv77n0fP3nscQ69\nepibbn07jlVHMtnMwsIsExMTtLW2s7a3F7fkVpIno7EYI6PjNDQ1MXzmNGv61rChby1/97Wvcuu7\n7yMST5JK1DEydImtW/v+UQr85yKJTQWJNLWbRla+u54RQwgL11MoLcgsZPF8TUdnNxrJxPgUSiki\n8RiFcglYGY69lqe//HMl7+vq85YW79CiVnGrAKIWNYpaIKVNLlfA8zzj8QaK3FwnrAAlTDlSLatl\nSQM48c3g5ZX7uDL0WvXQZMWDTSaTlMtlSkUX3zNLz7QSuGUftFyy7GsJfF5TKGQ5/yr7hNlvMu+v\nPsYkWRl+Gp7WZGgv+Y/Kp9a168z96nlowiVS4X4ZeGCVREVNsOkKlKy0xtfe0izvCsN0pW/hmAsh\nliAKEhEkolUr8RneCgQ2UkQQIlDgYYxdVMMoSxTZmxQWWjGGfA2SVBMPfa1QCvPpgzYZgyvO98o1\nKrbFzz7vlverFhWpNQZr25Q15y6H18Owy3Kem/MVlmObzarhmzZhjlqeSoTJ8FfaVAxCUy6XiEYj\npmZCuYxQimQsRkdHBz1d3SilGB4eNsvGAiNiZmYGKSULixlTGClACnO5HKVimcLCAqdOHKWcy5HP\nLjI8OIRSisx8mr27drKwmEZamsnxUcbHx6mrbySaSDCXW2R8dpbZbA4iDucHB7j9tlso5rI8+uPv\nc/OBvbz9rtsZOHuOt991M011Nk899hCZmTF6OpsYHrzAO+65G9s2qOTY+AiWgM72Djo7u1lYWGBq\naorxkSskow5zU+McefkQtx28Hr+Ypbu9jVQixa//21/nM5/5LCePHKM52cBHP/wxvvrVP0ZJl5Kb\nI1XXwLq1/axds476xkbK5TLJaITerm7aOtrZtHEL/f39FMsuhUKBgYEBnGiE5uZGmluaWJjPsHXr\nZqanJnj6qScpFrLs2rmV1o5ORiamGboyxhsXBmhq7eSXfuV/49VjR/k/fu3fom3J3gMHeOe77uWL\nv/vfeOKRh8hMjdHb0YL2PaYnxzl37hzvfe/7+f73v082m6Wzp5vmxiTd3d0oIRGW5LrtW4Aia3qa\nWFyYoZhdZHRshlRLG2NTM7z44os89dMnGJ/JMD23iMamo6OL3q71OHaCpqYmuju7GL8yQnZ+Dq9Q\noj4RZ+DMGSZHR5FSkEjESCUS7Nu3h5b6FLpU4qfPPcudd+wHz6VcyHLy1LGf+Zm6Fv1ceODZUnlJ\nJ4xg1hXPKFQYtYpDCGOVe66HZdnUNzQghFnakM/liCcSgUA262zDdcMmlUnU+Ao1ZU9roLrwulfH\nd32qkVsVaFXTTlhkZDn8rZRR5J5nYOhIxAjyYrFUWZImhBUcu9QjNMK9Ni4ertcOyoiaIF8lmSr8\nHsYTYanAr8afJYKwKI3E801deccx617z+YLxLhyH0EtVKizIgVH8YTFSHcQflYHDK+u3QxtBKDzt\no7UMHKEKfmnQicCLkssEd3gfJuNbVorRCHNTECwjq46NKc5j28YLl1KbJCABytd4ysNXBgXx3DCW\nD7Weo7RE7c/KOnKtfESwHtxSVLK5lVjqRUohTUKVAoFtDFEsNJbJbA+MBq1MvQAfASKs5FWFz0M8\npuLZhhZciP5Ufr852aJaUjZsWYpg7JS/ZLy06ZxBRmqSFy3bXoJkmMqBQaa4lNiOrJQrtmwrSNeo\nPiNm/TVIWa1YFs7HipKu6XP4/9IVGktXWaigwr3SmpJXDvJEQsi9moluB5slLWzLxrIcLCmxTFYf\njrQqyXJSSiYnJir35fserlumuaWZ02dOE3EcNmxYj/Y1c+k07e1tFAtFwlS+02+8QWtzK7OTV1iY\nm+LkieMkEglm07OgfEYuXSRiWQycP8nu7dsp58uook/cirChey1WMkUy0Ughr7n1tjt47LGfcPyV\no2zv30R3bycvHXqKBx98gO6uHlJJzbe++XWu33cAVSxy+vXXaG5qpL6+lYuXRtm0bTtl38Hzykyn\nZ0nW1aO0ZmZqmqiUjAwNUMznOH36JNryWSgVae7sZe2GbRw5cpKN/Vu44ebb2dC/mVOnznLm/Hm+\n9vWvsnHTeq7ftY9kvIE3zp0l2dyIVy6yMD/D6PgVSqqM9jXnzp5n954dZDKzZDJzFAt5tPKZSafJ\nZRe4PDRExIrygQ98hMmJCUYuDXPDgYP096/DiVn0ru3G9VwuDFxkz+7NvOt9H+HIa6/zw4cf5zvf\n/jaf+fBHuXP/Hn78wDcZOnucX//VX+XFp58iPTNDYzzO+971Dl449ALZsqKnu4XHHn+ZX/wX/4ps\nPs/gwBnOnzxOU32E18++QW9XH5NTE/T3dzE2Msz5gSHWbNjMB3/pczS3tXDoledp72oh5jRRX5ei\n6GXIzKV52913UcxlSSaiFHKLPP/C06xb20NmYQ7fLaPyBTJz43Q1NvCl/3I/x88c4Z9+6rN895t/\nxR9+6b9x6tRhPve5z7/1IfTFYun+a1nmsNRzWgk6DuF13/eJx+PYlskqjUajVaETnGbZFr7ysaSD\n0j6msppfWYKyZDmUXuoFhd6U8YqDQp6m9oeBwaUwSukqb8UoOWMcVGONlnQol108v1wRbmEJZxVm\n1epq/fCV6WoofyW6Vpy8qiwlFbWhNbFYrPIShzDBp5bvIlBsYfY4hJnMBMVrQoWkDXR5VdgiTDYy\nNx3yZLl3GRoY4TiEhXL8IHtaElRMk7LShsDUyZYyUlGmlexjZV6IYtUkvYV14c1ckQgrLLRiUQmZ\nCtChskYhZfAik2BcQ35W7kFplFYVT7/6n4/GNf3CRmlT5x1h4wtJiDMIIYJlfVRq9L8ZhagGFXjY\n8NE29QuR2sSOLWQQirFQwmRjazAhDCHMPMaiUuRIWoYnQeUhKYI12iIwCqRJlBOBLRsaV6pmHCtz\nLFxTX1OaNVzHrmv4GM6x2nm63FsPzXAZDM7S2RWsjRcCLU1IDcxKgLLrYTkmeQ1b4vl+xVD0PY/m\n5mbm5+fJ5XIk4wmSsQTTk1PE4gnGxsaJ2g7FQpaZ6RmcIIHNdV3i8ThTUxNcujTEtk39jI2M0NXd\nTVt7DzPpNLatQZV4/uknyGTLdHT3sm3HDiwLpmammZ2bY+D8AJn5OZyIRb5cpLGxiZdffJ4b9+9j\nZHqUDZu3sjAxRUPMZiKdpr19LTfd9XbOXBxkbHQcr1jm+psOEm1swtMO8YY6du/bx8TUFG1dPVh2\nFDeA/K9cvkhmfowdO7eTrG9naHSGe97/T+hc00+xrEA6yESSubyHk6jjvl/4AJeGhnjlxRcZGrrA\n7bfdRl0qyejYFdau6cYt5rHRbOlfx+OP/pjbbr2RiO1wceAc27ZuoSFVTyKa4PixI9h+GXdxnrVr\n13Dm/EU279xDMWKRm8szMzeP0Cbc1dXWwdTkOMWSIFpXx959t/Cxj3+UPXsP8s1v/5A/+6uvMzk9\nwpaNW/j0Jz5MZ2szh48c5dkXn+OlQy+wbk0v02OjdHavxxMWb3vH25kcH6culuCP/vAP+fhHP0lz\nUyeLrsXpw48xfnEQt1jg1Lk3WLN1D2u37qYxEuXws48zNTnMwYPvI+ok6e1ppaGhkWy+iHAcnGiC\nhsZG9u7djZQQi0SZz8yTWZwnm07TlnT42lf+gP17djKXnuOLX/x92tva+Z3/+AU2bbvurQ+hhw/o\n8nXR4X8rrcsO94Xrk8MHXSlFJBIhl8uRTqeXHCeEoFwuA1Aul7FtGwOvGk/Udd2r1lLXrnk1bRnl\nHb65ClhR6NT2H2rXfPuoAHZDKJyIqdpUKBQq9xG+JEUEMdvw/JCWeyb/EB7Xbr7vVwyfcAv/C5MH\nwwSfkBfL72ulMfrZ+vPm65tr2wr75nneVXPB9cuUXTdICqRiJIEM5kaVd6Eysbh6fGr7vfz45f9L\nYV81HssNv9rlUJV5pIMStIEBqIO68Gb+rYT2BAlxfw9fw/i+DBSZuUeJhURJo6CV0PhS4QkfBXj4\n+FrgByVs/cAwDV8UI2QEhENYYMbXqrKJYDOhCDMmphq8DtagrwzvXyskUMujFb3zZYadwmSTh9e7\nql1dU8vAg1LRJL5qJSqZ5o4dwXe9itHgui4R2ywXa29vx3IkYxOjSEdQ31QHwmcxnyHVkCSWTJEt\n5Ik4URqbmpmbzwQllWNks3kjWxxJMpnk9BunWN+31qwVLxZZv2ENmUyGY0de49BzLzE/v0BbazOl\n4iI3HdxPPpuhVMjT2NDEDTccpKt7LT965DGam5uJx+O8774P0NbWwXx6jq1bNjGfnkJJeNs77kYL\nE7abmZlhcmqcGw4cYGxklMvDl2ioS5GIR5EoBi+cp7ujlXjU4e4772J4eJjbbr+T8wODnB8cpLWz\nk66+Ps6du0DfhjXUtzXiSsnv/O7v0dHRxpnTr3Hy+MvkFtP09PSQyxbpXdtPLl/i5Ik32LBhE5FI\njFOnTpGMJ8w6+9wCM+lplC4zMTHGpi0bcaIOu3fvZDGzCK4mmYxTLuTR+MymZxgdvcLQ8DBtbW30\nrd3A4OAgFwYus//Gm/nWd/+Of/FLv0xzcw8PPfwEzS2N7N6zg7/4y7/i8cee4jd+6zd58KEfMZNe\n5OSRl3nfu+5hYmKMo8ePUFaK933wwzz6k2col12S8SjDg+MsLuTJLyyQiji887Zb6G5pIrcwB8pj\n27YtNDSncOKCHz78Qy5cHGBg8CKTE9MMDAwyOjbF2OQMMhJjfHwCz/PIL8xz4/59DJ4/y+zMBPfe\ney/f+Ntv8cnPfIov//FXGJ+euuYz/bPSz4UHvlAo3l+r6GppuaJYSQDIGnjVHKdIJpN4nsfi4iKR\nSIRELF55JaAQAidi4/tuRXmHHkDttZYLzRAqrv4nlm4r9L3W86p4nroGGsXUKY9EIhQLZVzlE41G\naxT30tdlQlW4Vfr397z1YiXhL7ReIvStEGY1GDeu61Zg01Cx27ZdMYSAYH81MzosARvGuc2FjBdu\nliiJyv0v7VdN7HdZnH55OGMlw6G2FgCICs90BSIPPLaKh1eNcIdw/tK4a1CONKiIF4YuLEtiWxbC\nN2GTkHeVDOoAHl/K6LCgr1lGF8A1hi/aDjLzg9fIEuQrvuloLmte6auGvzZJC4JiNlQuW10zLazA\nc6+GlcKIkBZWkP5WrXam0QhRU7c9fAlLEIYwx5nF8IKllduqc5Zl87WKIC2Pf9c+j+FvKaUJX0B1\nYcYylmsVGlVGFpj5IQMDRJMvFLBs2+SsBOe6rovSCsdxmJqaIpFI4ns+xUIRx4ng+j51dfUUC0V8\npSkUi9iOTXt7O/l8nvTsLLZtk0wmWZidwHfLTE9Pk83lKJddXLfE4MUL3HTTPtrb11Jf30JDYyOl\nQoGzZ15nanKCvrU9KG1KM3d299Dd2cXs7BQPPPAAN99yA4vZPBE7QsR2eOHQs+D6FEtFEvE6xgcH\nsbVicXERYTtoBBu2bOTcGyfxfY/2thYcSzIzPsqu7ZuZGr/Erp27+f3f/+/EEg3U1TebTPxYjGxm\njua6FF/4wq/TvaaD4UtD2NJi+MIAcVvjFhZ49pmfsHfvHpxkC93dfVwYGKbsehy44UZypSKbN29l\nZnqak8dfZW4uzbatWxgbH+PSpWHW9a1FWDY9fetZzJdJJWLkcvP4nsfCQoYnnnic/v51dLa3E405\nlFyP5rYeSl6ZgufjC8HU7BQ7d+7kvvs+QLns8uxPHyZXctl43T4WC0XaWutYt7aLZ558jgN7d7Ju\ny1Y6e7oZm5xkXX8fba3tPPPMM9x+251YcYfvf+d7HNi3h7NvHCMVjzKbybBj9z4uvHaEsaGzzM/P\n0NK+ESEt9h+8HoRFW2sHsWSKSDRKJBZFSBsrEiG3MI/2fZpSMdrr43z9q19h29bNdPb08NSLr/Jv\nf+Pfs5DLs2nTZjo7O/7X8cBXVDRYBspkZaseqFjVWuvK0hPfM+/ubWlpYW5ujrHJMRzHvGwCVOX1\nmrXQ3XLjYXn/wFRy8hSVhK6lHqGoeHy1m6mEFcDvuva7Od/3NKWiSyRYYpbPFyre5oqJZ/8AXq6k\nAI1HFb44xKfsebi+X/XEdLU8LFTfuhbeq+d55p3JwbiEXvzyMQxLsi7fVupX0PsKXF0r/EMKhe0S\nPljGk/WpRUt0sFV/h9cxCWJVhVD78pHaflVeSxl64zVJZQpRedtr+FY1T/nmPdErGBkmCi4M9C6C\n4iRhFXUh8E3aG0oEYRkhl+uka5KqdTyDTdV4p1KD0DIo1CaCE2Rl/oUec5jMF7ZXGTv8JWOnfFBe\nsCROS+PtCoJEs4B/OngZkBBLKtitRLXKevkxtQarVTsPggyO2gS75chMFWXSCGEgc9c1eR7FYpH5\n+Tny+Txl38xlK3xRSYDEjY6OIZBkF3MkonFiToz8Yp7RyyPs2rmDufQs58+dJRaNEI9F6etbg1A+\niWgEITXf+953QXl8+EMfZOD8GSbHR7BtSaFgDONYPMLGDX0sZNIUC4vEYzZDQ4Ns2LiOZCrO//jT\nr3Lq5GvccdvtdPd2MXBhEMeJorRgZm6ed77jHubT01y6cJYmRzJ2/ixdDfVMXhkBr0Q8avPqkUN0\nttQRt12GL5zi+OHnwM8zOX6J+roEr586T3axxAfv+xBR6UC5TEL4ZEaGefTvvsF73nEbr738POva\nW0lIja193EKe//1zn0damu8+8Lds374dTwgaWlp42z3vJF6XQjgRZmbniEQiTE1M0NXWhlsqkltc\noKOtnfUbt+AR5dLlCVpb2nn+uScYOHOCNT29tLe38+lPf7oiY9yyTzKRIlcoEquL09DSgIxFyBQy\nyFgEIgk+9c/+Od/74aPsO3grP3zkYV4/fx4nnmDPrt3csHsbt91yE5//3K/wjW/+FXv2bCMVc+jp\nbGFxdoYLQ+cRssiHPv5pbrjjDqLJBJ5yGRsZ4sSrz7O+t51ExOHwS4fZtmkzh196lXOnh5iezTA1\nm0YGYdfpiUl6u9rIZebp7e0hFY9RXMwwNXqJ82dPkYw7fPnLX+bvvvMD2tq7iSUayWRLP+NTfm36\nufDAM/nCkk4shcPC78u83Zrkodo4mfnXCILwPd0NDQ24bpn03BzJVAohJZawUMq/SnjXQqHLYWED\nGVYjjGYTwcqyqisQrrEGCCNsvqrNsF+6KTTSNt5QJBJBKV2B+GsV6XLPu9r3f4jPFiSeiTA+rc0S\nN8LfQM0Ss9rwhOu6aGXqq4cx4OVGTyV2Hdy3ohoL13plIa61Dl4CYt4cF+RoV+KpmvCNW6LyHubK\nuaLGc6MKJ4cx5LDet67xknXgE1feIV7DW0I+BJ6iSb6S2CE6EaybFksKoeggoaq6JKvCDzDxYilw\nMIVdbClAWnhaorXED9oOjQKzBloSus1LVz4vfw4CngthchDCG9NB3Ddo2JTIxZSUJSgtq7WJ6xPy\npIoVVLPtzbhoZQwBAq/cVKqzAo9bIMIExYDfUgcvdBHGaEHXVOjTS9GPSrx6BWOzoty1QY2CJ84Y\nQwQFXAhzMoJ2w6ViQe5EBSHSGsu2kZZFLpdDEyTiOaaOeblcpq6+nmw2S3ZxgeamJlLxKOPjo1gC\n5tKzJBMxLKEolQpEIzZNjfXMTk1Sl4xRKhXw3RL5XIahwYtkMvPs3LWDnp5uDr/yMq7r4nkWQ0ND\noD0ijmRo6Dxr1vTiumU6OntwfQ8pbXZt38H3v/N3LM7PMDl6Cdcr8+nPfpZy2eWlQy/RkIySiEdx\n4lFiiQSF3AL79u6hpbsdbVl0dHWRWZjh4utv4LklNqzfwIXz5zl3doAN6zcyl55jdGKUnp413HLr\nnUxNT1Mu5ynkMjSkktQlktx177uYnkjz4x/8iFQ8xvTECLv37iY9n6G9o42XXz3KbXe/m9fPXmDf\ngRtYzGaIRiXPPP8CPb3dFHI5vEKWcrlIe2srh55/gR27dzM9mybV2Eh7Rwdj4yMkozFuOnAzI+OT\ntLe1MzszS2dHB8PDl8ksZFnXvwnt2PiqDJZNyS3jqSINDY1cPD+I65fJ5rL89Lnn+fznf5nDLz6L\nI8AvlBi9PMjE9ByxhkYGh4eoTyTYvX0LA6+fYmRogGjc5uZbDnDd9uvJ57I8/diPKOcXWdPXx63v\nvI+IE+NHP3yQvOvR2NZDe0cnIxP/H3PvHSXZVZ19/84NlatzTtOTpydqRqMcBqEsoUTONsbYgI3t\n18bhBWxjY4wxtsBkGzDGNgjJCAESApRHmpFmNJoceqYndM7d1V053HDeP869VdWjkQyLb31LZ61a\n3VVd99atc0+fvfezn/3sCeoalMRuTTxOIZuhoTZKPr1INBhgYSHBmYETUMzyzGM/JRY0SCQS5Eo2\nBWmSTGcJhsOcGTjJJRdf9GtF4K8NA54tfrK8e/n121LwSmnSMhTnR09S84yKUKxaV5HTHMfv5OUS\nDocAWFhYACBgBjx2+HnRkqaV5TfVn5ZumH6jMLVpesIcHhlIUA2z+w9NbX7lnsa87LyaR8ByXRXd\nGoaBYRjk84oJbhhGGSGoTiOUDfl5IiiVSNHfnCsfV3Y8BF5XJpXHVDKgmme8hIpgJQhNx3ZcDMPE\ncSWWbSE0z2B4UZvwKM4+Sq5iTsWodxG40n0ZfH7+/VT7r1ve1IV/Mm/Syq0g/c/ya3+rUgHV51Lz\nVHEolkTy1Z+hPsB7j+cA6Lpn6EX5Nd2fYrfiiChHzfGUzhRkrGlevbjfREPoXnpClZgZ3t8FEsup\n/q4ueF3ztCpDJcvXV512kUuuX3jGu3qoNanuua+L7gjNuzeaZ/78G+B7N+CX4VUjIZq/dr1FJLx6\nfp9wpxB0dV8Uwi3KRrYaOnd8Gd5qkR9RSSuVXyvfv0pkruERGhEgPffQR1K8rnPScwQqDoJSZnRd\nWVp7hGYAACAASURBVNaPcFyHeDxGyS4xn5intbWFgKFj2xbFYoFQOEgiMY90imTTCyRmJ6mrjZFJ\nLxAMaDTUx3ni8cdYubyXpoZ6wsEA6VSSdCrF8WNHWbt6NT988EFuvukGJiYmONXfT2N9AwOnB7jk\n0ksYG5mmpaWB02f6aW6pJxIJEwiYWCWXaLyGYCjExMQEHc0tdLe30lQfYeDUCcLRKLlSiVymgFUs\nYFk5ZqZmmJidoX31cvYd2EcwHGJ8doZwTS0bN26kPh5n8ORpLrvkMizbYW4uydq167l4+6UMDo+y\nclUHnR3djIyOYbkOeTtPa1c76WyBmsYmjGAdq1etJRgM8sD999HQ1sT1N9/MTx9/nLe87R20d/RQ\n39zO5VdeycHDh9CEJJdJEYlFSCYSRINBsqkFWpuaOH1qgIu3bWVkbJxYfQ0tbc1MTY0zNzvF8p4+\njuw/gYXi3diOpL2tDcd2OXdukJa2DgLBACXLQhOq3a9dshDAzPQUXd2dXHnN6/nCP32WufEz/OOn\n/oqdTz/N4NAIAwMD1DU0s2HrdtatW8cn/+oTXLZtCxdt6GNocIDOznb6j/YTr2ti5zM7aYmFWZia\nIF8q0bt1B7XxeoqWzcTMHJdedQUXX34Jesigb+16rFIJDZuQqXN43156OlsZHxni9OkBrEKBt7/p\njdz/3e9glwpksln6Nm4m2lBPQ3MTra1N2MUcGzf8eiS214QBX8y+PAJ/eZR5oSHK+S4pJbpuqDyu\nELi++igSTRfYtoKoazwPO5fJUVtbU2lKICW27aLrxgVh0Ao5yY9XlhLJpJTgVCI+f7jyla//QpCy\nH/lqmkYoFCrXkFe/p5qhrVCHV4hsz/ss9RPwc7E+oc7Ps0tXsY2rz13lLPibqYokbI93oJchdISX\nFkB6RuJ8rsDSa6keejn56gug+MZYInSP6SxUKZImVHRaZosvyV8vNdrqwZLnrwTnlgVfdK8ZrfSR\nD9Vcp6LLrVpxaprq7GUYXqmSri0xOrquew1PvGuo1HKBVA6Shupq5veo1/1SNT8q9wy6inlf/qiC\nFUDKivyo9O6ntnT9yaqFIaTAF1ArIxgITxil8ihD5AJA95wDv3e3KN9e12vfCaKMYvgOqytlBTmp\n1tD3yi7OXxMvv59O5YsJlPOuqf/t8n311lzF+VPz7ji2twYkqXQK0zQUm96xWUwkiEbCZNIpauJx\nTMNg8Nw5WlqaCAYCjI+OEjB1CqUC4xNjbNlyEeFQkJ/97FHm5+doa2tlxYrlTE5OsLCwSKlYQtM1\nVq9ZTTgYIB6LEQ4FOTc07MHCDuPjY0QiIVavVsSsaDRGd/cyzp49S3NTI4nEItKyyKeSFHJpauNR\nHvzRj7j0iivYsGETx48ewdSgoamRYydPcfdb3szQmbMUCkXMcJypmTkOvnSQM8eOIXSN6bkZamtr\nOXT4MLfdehvT09OAZGjkLOvWbSIWq6WxqYlgJIDQBIYZIBaLY7sghEMsGsKyHRqamnhx335+47fe\nz/4XDxOJxvjqV7/Ou3/jNwgGAoyMDGIV8/R2d3Bo/wFOHD1OXTzG5PQEpwdO0tHdiRkMowdDlByN\n3p4VtDa3cuzoERJzs+ghg2XLeglFQswnEhw9epRLLr2UdC5PYnaG2lgt0rIIagbClmjSpVjIEo7F\nGDxzhku2b+GJRx+hlC/Qu2IFmWyamclpDh8+TEt7D1u3bWfzpi186m8/xTXXXoWUcPDwYb7//R/R\n3tvD5PQsxeQixfQC49NTmI3d3HL9DTz84x9zdvAs73nfOzl48BB5y6ImHCeTWURIl/bmBnq7u3ji\n8V9w5MgRamui3HH7rezds4tvfePf2Li+j9//yEdobe9AmAGeeHInRiCAdGy2bdv6axlwcaHN9P/v\ncW5yTp5PIIOKCtuFxvmG3Y+Sqv/xK/Du0jynEIJAIEAysYCuaeUmKZZloXn1o6VSCYS75FpcB6T+\nCtfjyqrz+79rZejS/17nG8UL5V/PH4bQKNoWxWKRaDSC41RgfkMYIBWbXpbztDqOozq0ua4PNbrl\naN5xHNAVYWf03DAH9r/EFZdexrKVK1nMZNF0D27UdSzbLsPSAAK9fJ6SVcC2baKRuGKKW6pZi+1K\nXE29LxAIYNslL1/5cqTAH5pbcaQuZIyXDq0qOF/qALnVx2gK4hfSg3uXnNs//5K76F+cdz5PjhVH\n5bGFMsq4Ek33HYpKBy//2jRZubeOVzboeh2xyqiNBNsqF3GVyVkuWrmxR8lVRs/wIWYXLC+3X4ls\nHXxYW6VnHPx+9mo+qtfl0rWmoSOEQ5mMBuW8suY5Xy6g6xXWvc/y99e4lOr6dFA8AVQ1gFSJde+k\nvtZB5f7r6Etc3WpH9WUIkxBITTUIwfEqCYTE0FWE7YhKGZ9/nOv9FLaDNJTTKaXEkBonTp1k3fo+\nivk8MzMzCCFoaGggmUwhpSSTzrGYnGfdqtXMT83guEU0Q1BfX8/xoycxAwE2btzIAw/8gNWrV3Px\nxVs5fuIoATNEJBJjbnaaJx77BatXrmTjxo3s2bMH23KZmp0hl09x6aWX0t7Rw8CpM7S0tHDq5Ak2\nrlvNwLlhwh4xrnvlcgaOHaMuFuHkqWMIM4QwgwRDIZA2+YJDLplg784n2HDRJqyixR233sVCssBN\nt7yBb37n2+TzCeK1cTQTjp84yYYNmylmcrS0NvOJv/ob7rvvh/SfOkV9XTMH9u8jkZglmZpHD4Zo\nbG6ivbWDjevWklpcYF3fGoQWoCZez7M7n+eLn/8cX/zyV3nhxX38y+c+zfhskhcOHmLfrie54vKr\nKWZneOrZ3SzrXsHo8Cmi8UbyOZtIXR1X7biWWG09UgQZH54gFixysv8gbb0bqG9qpKt7GUeOHCEe\njdHd2UlACzA+qsRwcpk8xWKROg+CP33uNHNzc7S31XLuzDmuuPQqTvYf5bOf/Wse+clDREIxLtu0\niX974CfsO3yMa6+9lpqQyUc+/EHmZiaQ4Qg/e+gJUjJDXU03B3c9xejJ3XzrX/+VD3/yc2xcs47h\n02f5vx//GF/5xhcww/U0NC/DymbJ5mcRrmB2KklTY5yGulqkdFi9ZiV/+id/TG1dnBuv28Hc1CQN\ndbUYgSAi3kZjYxPx2hqy6QzbL9nyahHq/zpeExH4Qib3yZcRoM4rJ6serxyVv/z9S41k5e+O4xKP\nxbEdh/n5BLpuEAgEcRxHyQx6rSV93XUFYTtLemUvuabznpX7VFe99Vdxlqrfa3ntP/3Wh1JK6uvr\nValCKYdmKGENV1q4rq3Y9cKPIJWKmdBAGBqOdHA0SbFYoL2lhb//u0/z93/7N9xww/Vs3LKRRDKN\nKQwM3fT0wNVmqwvFvnYR6LpBqVQkYAYxdJPh4WHq6urKxC8FZaouSpZloXlOzPlO1JLn0l2yCS+d\nzqXQsZ+qR0iv5lx6UaSX/j1P5EQZjkqu9ZXWj/+yFD5qUJFV8WuO/XysrglPRlV6vbZFWUgHXC83\nK7y6fqHO6apzVRMJ8bLGtlRGWAoVRbuuq+RaPRRC96RaDU3D0ASGJlSLTeHXtGt+ZtqDwRV5DAzl\nwKApg+1TwKRWMaxaFWoB+A6BxxRQP0VlLsqGUuUqvFpsBapLP/3lkw7UjVIoivf5SFH+U/XdvhCS\nUnZUhM+cl0rX3HN4hJBKrAa/vE1VewipcKBy2keovuymphEOhRgZHaGtuQVNCE71n6SpoVFpnodC\nChrVJL3LesmmM4TDYebmFgiEQkxPzSKESsXpusptLl/ey9mz5+jq6uLkyVOsWN6LVchz9uxpFhMJ\nXClp62ynWCzhOEW2bNzM/HyChYUkyWQKJBw+dITkYoJcKkk8FiWdyyFLFqMjw9h2CcsB2xF8//vf\nY9WqVaxa3Uc2m0fiENF1NqzfwFwyybotF3Hk5ElW960jn03juBoNTY3U1tazoncld9z2Bnbv3oVE\nZ82mS4nVNtHY1MR1r3sdHW1NrFq1nMsu2c6K5cvRjDBP/uJxXnh+D4Pnhjh95jRdXR1MT0/yO7/7\nW3z0o3/EDx+6n29+4+vsPnCYpu4VBGNRNqxcxre/8WWuuPoafvCDB7ntlhuJ19YxPT3PytUbaGxp\nIhQJk03niYUbiYRDSru9roGamhpKliLwdnR2kEwmSczP4boKGVu7Zo0qudUkqjFsic72ZlrbG2nr\n6mZxMcu2rRdxuv8En/n0p/mbv/ssh/bv583vejfDQ4OETZ09u3fxhltuJJVaoLW5jfa2NiaSi4yO\nzTA2eJonf/4wueQiU8lFNm/YRCwcZfcLO7n40ktYSGZZSKawshmeefoJamK1zM3OE4mG6OtbjxnU\neG7nk4QjIaanp+np6mRxcYFiMc/c3Dz9gyNMzs7w4EMPMTM/x3U7rvm1IvDXBAu9LG/pyY9CBc6s\nrvkuM2FfgXHqH+84Do4tcezKa9XsZMdRr+VLRYLBYJmpvrCwgGEYRCIRpCvKx/n14eeP8z8fn+Xr\niirZ0Ze/75d5VJ9f13VKtoXl2MRq4iwsLPDEE09gWRYtTc0qWiuV0ISJJpVcpAZKKtMR6BiKPexF\ncJqmIXQDgPa2FlpbGpifm8KRXiRoGFhSgmFgmkEcqY4Vulm+L4bH2g0EAoTDYT70oQ+hm4ZiZNs2\nrmUjbBfTqyPWdb0q+/ryx6vNreu6nu6pW45i/UizMvdVxCe38rjQWDrXDkI6ngFwPChWLjFY5XWK\nx2qWbpkAp8yhrGp9WRWNu46H4rgeAYsl38mVAtujY7kSLOl6VQ7qu2qugy5dNGxwbe86bQwcDBw0\n1yIgdAxkRfNNyPJz4eWKFUcAKrTJyrVXzwnSly+WOK6GK71SMimoZpu7fprEVQiCoxJKHtqgeA/e\nBCkjq6sr9gl0QuiqTE1cmAh5wXw4PtEShZB4ML7l5dbVwydPVox/MBgkFAphmiamaaLrguamBsKm\nweC5M/R0d7JxQx/Hjh7GdYogHSYnRrGKBVILCZqamlhIJMlm80xPzKILjXQuTX9/P4ahIaVqL7l6\n9Wp2795dbhwSi0Vob2vh4KH9FIt5uru7KVol+vrWcejQAa68/HIE0N7axp133EVrRycd7c3YVpHa\nmhiZbIp169YBsHHzFoaHRtmxYwc3XH8TTz72uPpu0TB79h1gZnyKtpZ2Lt5+KefGRoi3NHLRZZfi\nolHX2EomXUKTQTpbuhg6O8Lunbt565veSiaTo6+vjzWrVnP61ABjY2MUCxZCCxCK1PDhD/0uH/id\nD/PB3/093v62dxGJRPjSl/6FXbufYnh8lDvuegP3/fe3ufO2W3ji0Z8wPz1BY2MjTz/+KFs3baKh\ntoabb7iR+vp6Tpw4yYoVvUQjcY4cPIR0S0TCJsGAwfDQGIlUls7OznKjGDMYRjeDxGriiIBGMp0g\nnU1x8Nghdu55jpJrIw2N9rZOUqkU584MEwxEmZqbI5nN8X//8hOgubzxjhspuTbTU2OsXdPLwKnj\ntDTGmZ8ZJxYwmDg7wHe//a/EYnWs2dDHW9/5bqKxekBw/NCL9B87Tl9fH81NdQyNTBCvrac+HsLO\npnn7G9+qJHZ1SKaThGpifOFrX+DB++/jU5/8JLt37+bqa3aQzRfI5AocPd7PsQN7MR2Ld7zpzVx2\n8cUX3J9+lfGaMOB+frVatOR8YZELGeuXSS26VcdKb3NxFXzpuGA7FUEKiYZVcsgVSuSLFg1NLViO\nZHR8knQuhxkK4UiBrpkYegDHlmV9cl+jvPrhOkqu03WkL8OtoHP//edtSv7v55+nci7Kz21HlvXI\niwWL5qZWXNfl1Il+Xti1B6ckCehhigUXyzYQBLEtMEQA4eo4jkAIEyENTBFEk4oUV7Id2ttbKRXz\nuI6FdGykdJTIh3ApOiXydgFbOBTsAtlilmw2TaGQU3lwp0SxlKeltYm29hZcaaHrgoChK7PkGUHF\nIK7owVdDpP69vBBkXjbI0p838TJjXT2q9eLL8KsrlWGW3k+3YriV8wDV+usarsqtVsyF4oCrJLZa\ncz5zW7gVQ+b62vfemsV3+JSDIlyPPiY9DoUA1z8eWZZk9de964DjSEq2L7Zj4dglXMfCcS1cxwLp\nILARmouGgy4dBA66cKseJfWgiCFKGMLC8J5rnvtQ/r+iokomhARR6UsghQbSwHU8Jrrrve7F/b7x\nrLhjHqwtdA/OrvQ2cL3vr/5Hl1YVVN/7pf8vmockAOc57CVXo+gISi5YUmBJga3YBeSLhSVrzC6W\nyKbSNNU3sDA7x+n+k3S0tWCXCoyNjJBJLSKkQ0dbG47jkEgkWFxMkstkmZ2aJJdeYEVvFx2dLQhN\nspCY45mnH6e5qY66eIyp8TFKhXyZB/HBD34Q2y4RjgSpq6thaGiYhUSCg/sPUMoXMAMGxVKBFSt6\nyeVyxONxdu3aRV9fH4ePHcUIBGhp66BQdGhpaePWW28ll8kzOTHC63ZcRUtzE/l8npm5WV46eID/\nefBBDMPg1KmTNDS3cHboHMlkkos2XcTp/jP86Ic/xrIs0pkF6sIwdOowTz/2CBMTQ0gp6e5dhRap\np2PFJiYnE7zwwm5MU2dZbw/ve9/72LFjB297y9sJBWqZnlrgC5+7l0wyxe++552c3beTrT3NTIyN\ncO7cOT7zmc/wzt94Dw3N7ZQcScGyWbdhFWcGB3jk4R9z4vgR5hKjrFm/kvrGOtLpNOl0lnQ2T2Nj\nM44jSaazhMJR1q5fiWFKhOFw5z130dW7nOlEitODo1i2xoEXd7Nvz06W9fYwOrtIS08f/3zvv/Hk\nY08xOHCCgwdepKenh8nJSXRd52T/UYq5JHfdej2HD+5heWc3I2fOkMpkqGvuIFjbyKpl3Zw9c4ap\nmRkGB8/xZx/7BB1dy2hqbGD9VdsZTsxQ29pCtDZG37o1fOhd72X3ww/TWBujtaWJe++9l/lklkC0\nntGpBLVNbXz0Lz/FjltuJ9jYRNe6ja9uGH+J8ZqA0OcW0y+7iOr816sT2ZYe48cYFzpGbVQAKrLX\ndK/1pRCULIt4TQ26prGQWMS2HYKBkAfBuSB0hKZ74hDCi0oqD19lvRoYVFu1n1eV5ShnCdv+vO9b\nDU/6JsRxlLhL0SohAMd2WL9+A60tzfzJH/8Z97z5zSymUmimEqfIOxYF2yprkDvSwXFt1XjBM1Q4\nNvXxGGcHBnju6afYvu1iLr/qatB1AqZOY20NAdOgJh6lNh6lJh6jrjZGY10N8XiMmpoYDbU1RCIR\n4tEw7Z3txGvizM3OEY/HPHKbpZqI4OJKF90npZ33QF44710pD6vorvsP4ZOnLrgQKtwuDwLBZztr\nnvSnf+uVcZblCFXTwK/C9ulYwtcTx4PjhQua9InXqEImv3bcrdzn6kvw5x2JFMpQllX1pYsmXJAq\nRSM8CNqR/nv8kiyfrFVFxhNe0xZcBYl7vHC/bl11RXM9pnalrEvzctJC+BEuHiHQg+2NyvT6/zOq\n/aifkvDK3KRSEhQeqU3NvfDmpOKoOa70kBNvDsCTmnUQmoahiyUa6ngoCMInpSnipZAeIdCbWAFl\nmV6tyjEsizMhyn3DcVxVISAEsWgUIQT5fJ7k4iLNTc2MT4zS0tLMwkKCUChMT/cyYvE46VQKnCJd\nHc3Y+TSOJslmM0RCQUxD4+jRw7h2ieamRqanJunb0EcmlWZ2dkZBwqUSL770EulUkosu2komkeKF\n518gEAywetUqampjaLpk7ZrVJGbn2Lp1K8IMMjU1RTKdpaWjnRP9p1m5eiXD587w0p69rOlbzaH9\ne2mIR5mbn2fbpZdyZnCYZcuWszif4OCBg/QuX8l3v/dNokGT5oZmNq/fws9//iid3S1cd8MOsukk\nZ8+cwrELdLS3YdkWPctX0tLWg2aGGR86xYH9LxCPh9E0+PGPHqanZwXbt1+G6wgi0SgbNm2itq6J\nXTuf5NDeXdTFAjS0dTI/N8eRE6eJ1TWRyeSob+1i3cZNWI5NT+9yenqWk0qmyOXSlOw8ZjBIIBDF\ndSSaMKjxeEm5fIH6+nqcUoE9L7zA5k2bMAJBSg7kSxZt7W3kc1l0K42ULjfdfjfP7TtKOudy8cZ1\nuNkEQ6cPgxlhZd9GBk4PEQwEaKqNEw+b3HP3PSxfsYKR0Rk6W9vo7elhfGKUI8cOk1uY5/JrbiQQ\nivDg/f/Nqs2XsXpNH9Ojw8ykFghHwmTSObZsWM/q5d38wyf+khU9bVx97bXMJ1Js3HIpP398JyvX\nbGDV2o00NLdx4MQArhZmZGKOodFpLtuy5teC0I1f5+D/r8b5amjVbOFXy4UDr5g3fSVRlurjSqVS\n+bMMwyCVShEMBmlqaiGVSqHIOpUGDIqxfuEpkxK1qUs/f4qXrvUMsl/TU0Woe1k07j13/TxvlROS\nzmYIhSK4toV0XTKpFHU1cV5/8/XUNESQAQdXCsLhMKGg4e1vKpeka0rL3NQVkUoXAiufJ6AJauM1\nGEaA/v5TWPkC44ODmLpgYGEB27bJ5xVp5OzZswhdJ5fPkEnnyOfzZHJ5CoUCxWKR6elpPvrnf8aW\nzVtJLS4SDkcIBEJlln+ZZf4r3MPKKNdwXeD1/12SFUDziFd6maemyGcqVa7j66EL73qErCJCoURY\nPGuhQGOp4F/HM4TKeXTRfK17JJSdumoehuol7gCe2QMk2DZoOqqXiuutvSqGtdDLHdV86Nsvi5JV\njkoVq8D7Hi93Ev1haqhUSZkv4DPtFSfB79YmMMAT7amQTaucFC/PjxS4orJ2NSnK90cTLo5rKxlb\nT3NelXj9cs658JqVqA8UIFzvnqKQCCHQvX4CrieCpGZbrS3DMFRnPdvBdRzS6SztbZ0cOnzAQ/8E\nzc2t2LZLsWhRyJdIZrKEw2Esp8TQ0Dka6zZQVxshK20MXbCwkGD5smUUcml2PbuTDRs2EQqqNNPQ\n6AgNzS2sWL2GfMkiVluHYRjMTM+xbds2rr76au574H/IZFNMjpcoWUUsM8jmzZv5yU9+zC+efZav\nfPErxGIx1m5YzxM/f4b1fauZGBnk5ptvZXx0mJp4iNmZaQ4e7af3xX0ULZeurh56enu54tLLmF1M\n4RTzXHbJNjpaGjk90E9tbS07Xn8lDpKi4xKpidPe1kbIDNAaqGd2YoTJyWn6Nm5Flw5NdVHyuUXu\nv28X191wG1u2bOOnjz6GqbtctHUrNU3NDI9PEa6t5YH//Drf/t59XL3jBo4fPsIb7riH6fkEi5ki\nHd3LKEqX/uP9bFi/hcaGJlKpAv39h+ldsYx4TT25XIFiqURtTQ1OqaREmlyXxWQGQ8Ka1RsYOTtM\nR3cX0gzQ2FCDrruYIUHfhouJ1sTZd/Ag41PT5PMWJ/c9icTirXfdzeGxWfa/uJ/bbr+L/mOHmBgb\npjEe54lndiHMAE//7AHe8pZ38/DAUdb1rcZyJLFgjNV9fcTraolEoqzp68NyJB1tnfzi8Z9z9913\nUGoqMjs5wdzEObpW9fC1f/8yf/wnHydcU0dJ6my/6jrm5xfI2QXODpzjiksv5uzgIGfPDbFyzdpf\nau2/2njNGHBYmpuEV5dVhVff+Ksj+OrX/OeOZaObRrlky7btsuIYQlJbG2diYoKamhpqamJVuXT7\nVT7PU3arev3VzMv5Brz6e1UPTdMwTVNBtK6LoevkchmGB89RH4/x5OOPkk6nSSbTymtNZ8jns8zN\nzah8khlkZmaGUjFPLpfDKRUpZHOkUhmQBr3dvfzwBw/xH//xnzhS5U51oXKhihwmsKRUbRcN5dRE\no3GikTjC0Kmra2BhYYHsYoZ4JKp4Bq5SvPLV5RxH1Qif//3Ph9NfGXE5by2IC8/u+fMohPCiUel1\nxaqCxT1yliYBv64c0DVd5VcdiYtfHleJvqvzthU2uHLcXKfKORPuEiPsrxFwvLSCMuJqnisyoyqC\nFxiGZ+ykg+YT6zxmerlCw48uXeF9H+8zvfy18CJz6UH3VIvpuIocVzayEnVtHvkOF3QpsIWrPkP4\n0rpu2ZaqbvduVQMblTzQXZWn1oUnlqJLHFvz5gz8pm+2j0rIl+8BS1EZiaTSgMYnCy695245veKn\nPTTPAdeEhtQ1MHU0BwJmENtxCEdiDA4Ocv3113Ho0CFquuswjWA5OheaxpoNaxkeHuC555+jraWR\ny3dcz9mzg+TyE5w+e5arr76adDrNmTNnuOOOOwgaOg0NDaTSWV7ct5+tF23mF4/+jJaWJrZv28bX\nv/Qltm3bRqlUIJlcYPv26xgZHiKTyfDCC3t5w+23Mj47g10q0ljfxUJiDs21GD53lr17X+C6HTfx\n+a/+E3fdeQudRYumhlMcP36cD3zw9xgcGSWZWsBF0tzWTdAMo6FzZuAUAwPnWL9xLctWrmDfgYPE\nonWqlruuDgOHbCbJ9PQ4q9Zu4Nj+55kcO0fANGisb0Cp2Tk89fTTXHnVpczPzjI4PESzC2asgTe/\n872cO3OCr3z9XzH37iVihnnXe97DXCbHieOnWEzlWLuhgTXrIoTjcTLFPH0bNxGJhujq6mExmcIu\nFVlYWKCzs51CycZ2HBzHJqiFqK+tR1oFJocGKKUWqWlsIZPNMDw2wtTkKG2NzWSGR4k3dXDNlVeh\nlSQLw5KZU4dIZUsMnTlHuKaVzu5egoEw45PzuFYNlpOnc9kKTp04yLEDK5lLLbB56ybqQiFSiSyT\n01MsX72K1GKSUCREOpVh8PhJdB1+8Ysfs3FdH4889Ag7n36Mr3/lq/zDZz7HQz97nHu/+DWMWD3C\njIFZ4MSJ4/StXsHw0Blamxp5YfcQs5Pn4MPvfPlW9yuM14QBz2QU09M3UtVlYNXG/ZVgcX9cqLTM\n/3n+8YZh4LhLNwC/85btlCiVoKWlicXFRfL5LPGaKIFAgFLRvmC+VgMc16FMNqYSH75aCuCCTsl5\noaqUEl1o2J5yXCAQYGF2hmuuvJKAHsSWOfBEMhpqGnBsG6dUJBaLkcvlWLu2D2HoGIZGQyxKKvAZ\nUQAAIABJREFUpKaRUG+QpuY2ZueT7N27jy1btvKBD7wf2y5RU1NDNBpF0zTC0QidnZ30nx5g2/aL\nKRZyhEIhBCamGcQwgxiGzrFjJ+jq6iKfzaOjK+9ZOJRKNqapl+9t9Xeq3qiXlkZV5bCFXyrlT5Cf\nL39lac7znwvPiAgpy3r1UnjqXsKHXv1SJy/aRhUBuqDIc5rm6QoIz4CJJbl7X+bVdSvkS99o6oYH\nd0tlvP2OdqqkWfOMmZLhVc1C8MhoABVlAeko4p7fftUVeBG/l9LBN1oajlTqaEKzFczuRehKr95z\nPlxVfqhrlTkWKKdAl56xFBJbOkqMR/PIZEuidpXfFsL12qV6LHrPKdE1DQ2JaeiEvNJC5YiqNn66\nlKqpS/X6lxURl4qD5yr7jDdvQsMtl+SppIdrK9EW5XNpnoCOiyY1cFykpuapYJUwNZ1MLkesphY9\nYHL06HG6unoIBEIkk2mKhQKXXXkV+w8fYl3fKqK1NeQGLdL5PLoZYHJ6iqamZvr7+xkdn2TTpk38\n/OeP0du7nHe86x2MTU7xuuuuR6Lx0A9/wOTkJMePHSGZTLNy7UqitVF002BsbIxsJkNLYzNNDXV8\n71v/TtAU3HD96/nrv/w47/vN97Nmw1rGx4bYvWsnzz//PDXxFl5/00388Mc/4bff+1ssTs0zvbBA\n38YNlIBAMMjavjUkFvKEjRg14Rgy6LB8eTcT85NMz84wP5dm8/ptLF++HE3TOH70IIlEgtraGhbm\nZ5mcmGR5bzff+NpXWda7EtMIsri4yKo1q8iXcgyNTRAKKV32mqZm+k8M8IZb7mRweIpzpw6zZcsW\nPveP/8yf/+0nGTw3RnvPchzHYXRsDG16gr6+PjK5NI3NrTzwwAPcdNMN9J84TldXF5MT44QjETAM\ndCFxbJt0Pkl3VytH9jyFic3evftYvW4jw2eG6GhvpaVzJW4yB2YAnBKzoyNMDp5m3YY+3HyW+lPn\nSC/Msfe55+joXEax5OBiIowQgXAdV151Cbt2PsENt9zI+NAApu2QTOdpaGnGxcV2JadO9XP67AjL\n4zX83m//NkcO7+ab//YtQmaMj3zkI/zFX36csYlxbrrjTjZs3c7I1CKxUICCrb730NkTrOldzve+\n+wDFYp725qYL7mG/ynhNGPBsNkuxWKS5ubm8cSt9YlHuD3J+RF3toZ+/4avhlw693EhK6SmI+c+9\numpdaErnGUEgYGLbNs2NjSQWF5mbTVBbW0s4HC47GWXjUwFCy+i5b8ir9Zr963sl1KD8N/Hy121b\n1Vg7lk2hVCRWV893vncfh55/gbe86U2Yug+fR0DXCASCRENh9ux7EdM02LFjB0bAxNUEugm2N0MD\nJ47xxjvfQEdXM29797uwLEA4ZX35SDTMt771bd73/vcxOTWNHoiStwAkspRHygJIjcaWDtJFD7rU\nVE2+gcB2JcViEQ2Bbi5dbksiLQ8GlqKyeav7ZKMtiby8uvpfgn7pooyZJiW61+dal2oj11AGWfNK\n7XBV73NHSqSjK2lXITANE9tSRsfQdIq2hdAMwMK2HTTD9GqeBQHd8FeBKqjyDJOLqkO33VJVQw6Q\nlquKv1wNW2oIu4ghlOiIFBpGIETJKuA4TlnURxiqkYcj/Nyyp/5mariWi+uoaNNL/Hg14UoARyKx\npevl3HVVauU6XvMZiW4EQTOwPeUyXQhsy0ZzNaSjeofbThFNM5S+vOvn4ZVfpAsDIWx0zfsfcyz0\nQIBAwEDYLoIimtCwdeUImFLDsSx0oVN0LEVM0DQ0YXrXra7dRSJcC2lLAnoIiY5mGBTsAgWrREDX\n0UwDGxehOeimwCqVkJpQEL3n3GhAPpMmZAbIZNLk80WsYpHlXcsYHh5i5cqVPPHEE6xZtYbR0REE\ngtpoA4tzaaySZPXqDaQSSZ568mmCoQDScWisr6dUKKALjRuvex0H9uwmGg2RWEhR19BCa3sX199w\nK7ufepxdTz5BY0MrN91+M6Zpsm7jJh579Kc899TTJBMzSFfQ2taMYWjcftMtLMwu8tCPHuSK6ctp\nbm3he9/9Hy699Gp+8/2/RTafYnx4hKP9J1ixbh17HrifibFRujrbGTh1jhPHB7jimmuprY2zrKeT\nvc/v5Kmnn+Ut7/0ANXVd3HDzGkI6zM7NY5XynB44zsTIIOvWraPoCFpa2qhraoFIPQ2dK+hsb6d3\nZTfJdJa2nl7WrXLZf+AQ69YbyPwMTz/9MHWRCLGgjl0osmbTFnY+/xKZxBxPPvkTfvfDv48QknUr\nVjCbmCG1MEsykWBuYoqI6zI/PMzAieM0NjcRLBQIhkIszi3gaiYNpkVybJQXpqYoZC1yRWjvWUZb\nd6fSmtAEo1OzOGaAxcUMp5PDdNRHSeSSRGI11NbW0r2qlSd3H+Kbf/pJBs+cIPnUDHe8+cP8/h98\nhA9sWY9jtBBuTXPoyFGsbJbule0MzU5y6mg/UT1AU2MN4XCUxrpGamrC/OSRh3BtydjIJDfddBOn\nzpyjo6udpw8cpe/KJr713/dx151vgmKSyZMHmRk8yu1vuI1HH/4pwZDJirUbWb5i1f++if0v4zUh\n5HJyeEKGQiEKhQKTk5N0d3er6EarkFH8emwAgVL/8uuzzxdxgOpcXWVIKcsCIBpVx+BQ3TCl/Fle\ntOOXkxmGQSGXI5fLEYvFCIVC6tq843wo3o8cHMd5mZZ59bWAUl5bYtwvEKw7jqMU2vDKlTSNUqGo\nPidkqlwiFRlWx3IpFApEorXYrkt7awP3/uM/8Rd/8VHmFlIUikU0aVMXq2FqeJh77rqdpqYGHv3F\nEzhCI5PP0d7Syr4X93Pffffx+c/fy+zioiedaiGrYF4/Vwug+dVTKDY1VX2sXdvBclSaotpw+6Iw\n5YJ5rULS8uFvHxYFVORaBa1WR57lxiRiqSiIrybmrwsNCBrK2BmaYlQjXI8V7uDaSoBGCB2rpCJm\nTdNwShaGEcDSBKamecbQS/U4DtK1qzQDlsLn5eu1lfPnINAjUYqOyndnckWyqSxWyUXoJpFIhFDA\noqWpDqw0mmZg27bXUc9rOCMMbKuoSv0cR+nn6yZmQDlKpmn6sioVTXuhqhwsx8Y1gpRKJeYXEpRK\nFlPT8zg2GEbAY9v7gkY68ViM2to4sViMSDAEuoZP7guY0lP0s7GKNvlCiYLtEAqF6WhqIBoAo5Ag\nEgpStGxKju01bvH+T4Wg4NX+apqmShA9lEULmKDpuMJgeGiKsdFpMukCRjBEIBjEdtX9AnBkJfct\nNEk4GCIeV053Op1UWuexCOFAgKbGRoLhAMVshunhEQZPn+b06VNcce2V7HzuWUYmR2lq7ODii6+g\npbmdXc89w7bNa9n5iwfp27SRsZFhtm7dSiqVIhxVSJddLCndd9dmYmqGS664CpcA2XwBUwgefOB7\nfOQP/w/f+ObXmJyc5I8+8geMDo+QXJhnxcplPPfsbgJBhcgkFrIEg2p/OXfmDPNTk0Rr67jrrW+j\na8UKzgycIhYK8tNHHqaULzA1NcXa9eu57PLLmZlPkMsXWb1mHftfeJbt2y/m1Kl+SrbDlVdfQ1fP\nKlLFEg8+9ENuvvZa4kGNgy++xMlTZ7nk6msJx6LMLSQYP9vPxi0XEYs1spjJUVcfpaWpgVRikYEz\np8h6yOltt93G4cOHefThR3j/+34LzdDZ9exz/Oxnv2BkcoZndj3P1NwCqWRa3VfXoqGxDilVFYRh\nwcz4JAu5LFddcy0vvriHhvo6FlNZ0hYENJdAOEQ+k6WtpZ29+/Yxk5jntjfcxkD/CRpq4uRtjaa2\nTsxAgGPHD9DUVINTKLF+3QYMJ8+epx7j4Ud+hqYZ3P3GW/nWf/03n7v32+w9dphHH3yQP/rTP6W9\nNsZ/fPVehs4NkMoo5/D3PvYZamobuP+bX+Ham1/PyeMn6X9pL60dy+levgJNN7n9TW/FsYq8+403\ncc97/4jO5Svoam1l/95n2bfradav6uX48aNsvuQStlx+Dcl0ilWrV9DT081tr9vxy5FAXmG8JiJw\nv+e0YRj09PQwMjJCY2MjsXgEy7LKTT18QyalU8lXw8uMNyij7Of7XPyQTZSJVA4VTgxejak6ToJW\nMb6WZSEF6IYOmiAUChGJREin00SjUS/S8EqHPOUx3+kIBAIUrRKmF81XfWD5OvxWGFDFnD5vmKZZ\n3pgsxyYgTAKhINJxlaRgwFB5xXKEaxE2Aoq97brMzSzSWFvPxz76MT7zmU+z4Los5goeBwA0YTAz\nM0cul0ELBGmIBpkYGeT7//Xv/ONnP0s+kwS7hKnrCM3wyqZE2Xj5BsoR5+VYqUpj6BqGMMp5cV8R\n7vy0iVbNAZQS6SvJXSANUn4/IIRbIZvhEyJB1RxXzonrIoSDU7I9qVMdRypnwxSqwYgeMClZDoah\nEYrFkBLyuSIiGCBbKFGQRTLJFEZArYVAIEAoEkCTkmIpjyKtqbVkeNGhguYN1Z9bSoqFEomZBDOz\n8yTTKVw7iONILEdRyTRTIyAKtDQ30BgziMfjRKNRhKm01X2dAikFJak65Ek9iBYIIjUNyyri4JIq\nlFTnOFdScmzyhSLZQlF13jJCpNNpLMvBNIMgoqCDLQWm4aEeQRPbdsikc2TSOXR9riyhq+mossGg\nhvS6RxUKBYRhYFuKM5JoqKW1Ic7y9kYsXWA7Lq40lUMqQNN1hA66NAgaBqapUyqqLk3Fkk06X2Qx\nmWZuocTE2DyGESRa04ztOli2iy01Al6vAMe2MAzfebYpWJCZSWJZc2iaSpEVig6ZVJqW5jTdPW2c\nOXmK8aEhamMh2np6OHr0OB1tncxOTzE7MYGzpcTQ8CCW41K0JfX1bezd/Tw33HA9u559jg0bN9HV\nvYxkMk0iMYd0bQ7ufYG6ujrSiwu4eghHavRt3gxmiFQ6y6qVa9i+dRtPP/kMnZ3tpLIZJqdn2XDR\nZgq5LNOT49x+5/Wc7B/g/vu+y+z0NG3N9azf2MfpgZNcduUVjI0MYwSDjI6N84d/+Ifc//3vk8lk\nkK5LR2sbw+NjjI6OcuLEcd7z3vfyre98hze+8Y0MDw9z5OhxwjWNvPWeNzFw9BBPH3qJxuY2br7r\nHlau24imw2JintmxM1xx2XYWUkVCCynmE1OcmZ/CLhTo6+khkZhj1ZrVzM9M8+3//C/e/s53M5nK\nEixaLO/sZvTsabrWbODIyZM0d3aSsYt01HfiWEVOnzxHS2sj6XQS3dZ5afd+QnUBXnrpJVqbGzDX\nrKC+oZXZoQnaensoOpK5fBIjFOPKq1/H8f5jTE5MoOs6PT09PP/8Ls4OHCUQCLB562Y6u7vQjZCn\nqpfFtm3ChqYqB6TDJRdfzPT8PH0bt/GDb/87lu3w9FPPsePa13P69Clamts5fPIIJdvissuvZvfP\nf8LPfng/0VCYYmqGdCTC9q13Io0QJ08OoAuHqGly9VWXsPmiLXzxX77Ag9/7LmtWr2B6Psmd97yb\njp5eBoYnmJufoTZSx9TwBLe9bsfLN/xfYbxmDLj/U0pJR0cHExMTGKbmSYc6XlQcKEceluOWGeGV\nCLZyTumzhlERu1OFu5aNgc8OrpKSRGqYutocfVarrutohopGItEIuJLWWIyJiQnq6uqIxKKK0e7V\ne2uGWY7CjEAQx3UR+nmGjQq73a8ZPj/3XfVlKFkqeg0EPClUKdE1HaFB0bZwNcWkdy27XFccDpiU\nHBuha3zoQ+/noQd/zIc/8nvce++9GCGTXCZHY2Mj9TX1TM+Mk03n6F3VTmZxgS/c+3k+9rGPIYSg\nkMsRDAbw258KqfqHlxnafnTpSlyhCE0VtMQzzLrAkRqRUJhisYhdUiIwru2ocwkUQUu6Xr666j7q\nFXTE/4Pf6KYiW+uTsapIT9LrSS3cMrtcw1UiKMLw6tRddEOVfwlNxyCE5ZoEghrpbI6x2RmEZjA5\nPUs2q5rLOEAxX1CpAt0kFArQ0lhPbTxMNBYBIBxU5L2C41DIFCkWiywupLFLDrbtkkqlyNoODpKA\nGcKQBhqSUECAoVNySrhSY2x8hlHHRdcF4UiISChILBYjGgsTjUYJBEJIV2BGTIrFIuOJRfJ5VR2Q\ny+XIl+yyBKzjOBQtG0dK1ZrSzaDrGkFNxym5GIbqAqda4FZY7KZuYIbCOI6NdByKxaJCTVDokE8M\nBBBmEGGpkreAIUgl00xPTzOdSBIOCIrFoqeRIHEcG9M0CYVCBIIxdK9EYHFhnkK+RNGysV2XVDZH\nJFxLrKYW15HYrpJFNQM6Ohp20SqvN/AQEW99BoM6ZlBxMObmZpBYtLU3MDc3y7nBAVYtX44ZCzMy\nM01dfQ2HDh3ixte9npZ4A8fH+2mMBuifHiKVTpArFInXN9NpZykWSxQKRZLJNFNTM0SicbLZIi0t\nTRQKBSzLIplMMjY9SDhey6YtF7F67ToSiwuMj49z950f4gv3fp6LLtrMocMHEALWre9jeHiQts4O\njhw9Snt7J+/+jfcyPjLCN775b7zn/e/nK1/+GnPTM3T0LOMt73g7BdthVd9aGhobeeThh7n77rsZ\nOH2adDbHZZdv4diBPYyOjuI4klQqg2FoXHH55axeu4HBU2eJhcKEYzHe9I530NjZw08ffYzerk7W\n9C5jw8ZttLb1cOTYc6TSWU6fOYVVyPKGW24lsZBkfiGDce4sX/zK13nP+97Plg0bKRQthNBorKvh\n37/zn/zBn/8Fxw8f4q4VK6GhnkBAY++BA+C6dHQ20tRcz9n+QVauX0e8LkihUKD/2EGmJ8eZmZsn\nUtvKocMHWLN8NWuX9ZCZnaOmNsbmVSs4NXAcUbKYHBli9bLl9J88RjQaoaOhnZHTUxihMNlSiRXd\nrdxw8w5WLe9kz8497HrqGabzRa43DK655hrqa+IcP3KAn//oEb7z9X/hmoEdHDxwhDXLWvnml/8Z\nO5djw+pVLC6OU9/QTDFboKm5jvGxAbSAiavpJBcT3HTj1bhWhk9/8hMcPHyIP//4X9Ld3YNOANMM\ncezoCZrru9i0cTupdAIhf/12oq8JA67rOqFQiGJRKaO5rsuaNWuYmZ0ilUrR2tpKMKgibsuy0Ewd\nXTMR0u9LrM5THZ1Vmoh4RluDanxa01QJT3n79yNFTSlJBUJBhJQEw0a5eUcwHMXyWeClEk1tbSQS\nCSioWkUNVMTuVcAWHQVp266L8QpkPNV05dUTuq7rEgwGAShaFgEPkQAlsyoMFYFLKRCGSVBopNNp\ncjlFOJOOzdDIJHe/6S4amhv5nd/5Hf7hHz5LR2sbcxOTKjVQKODaDkHN4M/+/nO8+zc/QHN7N1PT\nMwSDYUrlshzVIEPJdepei0lAuOiOQHMFrqZga//7qvnVMQJqww8FTSzLolTMK5a6VOfyy39x5ZI2\noRca1eptPlFNjWqugTffiolWNvYSiasSzViuq7qJmWECZozFZI6DR/txBRhmkJnEIpZUUbHSdRfo\nZoRAJI4t1fzn0kVS6Tlcu0ggYHj6+jWA4nIUrRLFYpFQJEKpUFCMcS2IGQqA16K1ZGlecw4NwzCR\nbglHCyICYYJ6gEIhRzJrsZjJoC1k0DQwdYPG5haFUAlVBrm4uAh4JE1HEgzGELoSU3GkjTAcgrpR\nTrUIj8CHdLzmFQJHyiWYlOM4ZW10TdOIRCJeakilbZaQRXUDhIXmWkhXohs64UicqYWiUsZzJZFA\nECV44xMbs1hWukwqdV2XUDCIYUZBNwiEoqoqwK4IIhl+Hb+UGKbnaLtK4tZyPN16Q6FFQUOtt8aG\nBtKLCwQMk7raWrLJFGNjY9TU1TG3MMfY1CSNDc0cO3qUTevWMzE+yo8f+gF9mzfT0ljP0NA55saG\nWbO8hRMnTqDrOkePHmd8eo6Nm7aQzRUQQicSq2FqcoZsweKq193I8Pg0w8PDyrAXS5w4cYJdu54F\nIBqNkknnmJ9PsOeFvUxNj9PZ3sFFF2/nhef30txYz9ve+U7u+8EDxGvrueeee9i/bz+9q1YzMDBA\noVTkpf37ef2NN/D8s8/xzJNPsmnrVhpaWgkFTUKhMD/50cPEwhEa6xpxgWd3Pk+p6HJoz36yxSw3\n3HI7R070E5mYQrolRgdPs3FlD4VSkYNHjpNKp3nu2We47nVXcfml2zl6pJ+apiaYGGRkaAjhSrZv\nu4y9ew6wrm8T06l59h8+Qn00gqlrfOnef+TO225BFnOMTEzT27sM09BIJ5MMnjtNKFpHR2cntTVR\nFhcTlGyX+fl5mlo6mJ2aBGmTWpxm+NxpLrpoG0ODJwmFTeJxk+mpRXS9nqHhswRNwfU7ruX4yUHq\nm9spuZLlLS3kckkEBW64+SYGTw6y54XnmC/ZPP/CbqYX0rS0NtPTXEd3VxtPP/c8LirwsRxwnSK5\n5Dxf//IXaFzWSe7UWS7bfDEd3W20dfaSWphhQ98avv/A/YxPzfCpv/tbrrvmBj7x8U+SzdvkLY14\nPE6hVGTr9i2k8kVy+QwEBS/u2wd84FX3/v9tvCaEXJLZwiddVzXXsG27bOTiNTE0TfNqsiXhcNjb\n7BwsR3rtLwVeL0yq5UGE0JUREQKhaWrDFnrlvULghWWqhMc7jzpWw3GV6IsSoFDHFC0LqWnkSyWE\nplOyHYLhCJbrMpdI4AqBHghQclxKloUZCFIslQgEg0oApur6KtdL+fyv9NB0A4mqYTXNQLnFp9B0\nNN1QbF/htcB0JH4r1Wg4gus4iowlBJlUmi2b1rNs+Qr+5q/+miuvuJyamhhf+cqXmJyY5P/84R/z\nrW/9Jxu3bOG663YwOjlFJB6lYJUwdKNcYldmCHvCGz57W/NYexqapw/u9/VWEZljWSo6FwJT1zF1\nHde2PWa4VtYT99tRakIovZAqI65+98uEKH92tRFXt11TUbZeKZPyiNhY6EjdxEZDaEE0M8rMfJaB\nc2OcGBii4AgyuRIFG2x00AMII4gUOmg6jvX/uHvTKMnSs77z977vXWLPjNwrt9qz9q2X6urqvbV0\nt5CEZTACIyFLSJqxYZDH/oDNAR9xfAwzNh4zwwweZmETCARIlhCSutV7d/VaXdW1V3XtuUfuGXvc\n9Z0P743MrBYw+PAFfM+JU5FLZUbEvRnP8/yf/2Ic/cI4MlO+lrhuCsdyEoKXIAyh2fJpeCExCqEc\nI5USFiibWCu80LxWSll4gFA2USwIYuMpHkSaKBJEYYwWYDsOyrLRQqIslyDSLCytsrxaYXm1SqPl\no2wXoWzCGGw3nTjmxQRxZBjawoLYZAHoJJverEGSax6x5tEShut7aYQwBTZBrzbaHrfjbsEQQuMo\nwlLS/H0K0EJhWy5OKkvKSZFOZRBakUpnkY6LkjZaKYTlIBwHaTsgFGFsWOVGM24ZmoSQJDYJptGL\nY+J43eXPtm1DhiQh0sUmE0AISRTGtOp1ZmdK5PMFUhmXm9dvkM3nKRaL1CoVDu7dx1tvvM3FK5fZ\nun0zzVadpaVlJidnGejrx2+sAJqFuQX6BgZAKm7dmmBicpJcJsOtG7doNip4zRYjm7fw+pvv8PCj\nj/G973yXSxfOs3vXLixLcuqdk3z0Yz/EzRs3uHbtGvv27aW7q4tGvQFocvku/DDi/vuP8zu//f9Q\nr9W5du06H/v4x9m2bRu3JybJZLOUSvMcPnKIns4iMtZcvXKFxx9/nEwmy8pimedfeokLF87z8IMP\nsW//fr73zPNMTs0wtnOM8YkJdu7ezfDmLfRv2sTs1ASH9uyitrrImydeYd/dR/GB1ZUVfujJD3L+\nzFssLi5hpXLYtiJlS955/QQPP/IBFleaLFZaXHjvOksLi9h2mmJnD7YIWJyf4datG2zduo3x8Rk6\nOossLC7yxokTbOrqIRSKTVu2cvPadTKZHMWOPMQRYRjR3dtHT1cnS8sLFHt60AJefPlFij0dnDt3\nFjeTYXhkK41ag2qtzsTUJMWuIjdv38JrtXjn1CkatSqvvPwiv/4ff53HH3qAanWRs5duMLNQ5oHj\nD9HbnWdx8iZdfZsIY0E2l+fk6ZNk0kby9k8//zkunz7F1dIc+47cx7/6+V9k655DlGsRfYUu5scn\neffdq5y7PsX/9Gu/Qa6jC88PufLedRYWFg36trrE6tIMt2cnuDlxDduVbNsxzCPHjv7y36Z2/p0o\n4EuV2pfbbxYbpTlB6JNJ58hk0tRqNebn5+kbGEAoy5Bz1mjf6zfd/uPewEbX0uy/14E+ucHJS2/4\n/+aINcRmHEm0iMmkro1ftbIsA8lLMwdatk02l2NpeRk/CHBcF8cxOlPHcgxr2giqaUc0tquPVOqO\nzwsh12DpOwlQ7e8xumHbcYxntRJoFGGkEdIyr42OCKIIqWySgGaUFNiOw/zyMrvGdnD0nqP80i/9\nIgf27ePdd0+zsrJKaXaeY0fv5x984mNMTEySSjv4gQ8yRocBCm2iJjHFtc0cX7MwjaM1bXVbzyzE\nhl32HbKgdRKfEMYtSwgD17bDMcyZ2ngu1wv2mhuZIjE52TDxJ5N2HBtzlaR7MsiBZaPsDKHQxCiW\nluvcuDnDlWvjlOshfgRaWEhlEWiQliFRtffNYWiczSBCSYGbtpFS4yjjJqaUyVR3HcdQLhKpU6gj\niAVSmAIfRKBsG0tKoiBCqAgdBthSIoU29wUmqCPZDTspG6lMII1ZHwksy0EpC6Vs2jnd7SYxjo3Z\nadvuFZE0U1oTx1Fis6pBhybKVGqIQywpiOJ1e+M2qbNNAtV3+DO0Gydz/hwpidvRstI0z5aQECYu\nc2hsKfC8JkJCrCNiYoLAMw51lkBZiUJAaGMTq8wKIYh8zNM25yDSkeE+CGnWR22injYNY6w1SpkQ\nIoThNDiWJJ9LUyrNEkQBhY4CczOziBjm5+bo6+ll584xtIJSaZbOzg7qtSaFQhcz09Mc2DnEwtIy\n4xPjHD16lL7+QdxUGtdxuXnzJlrH7N65gyvvXaVca7CyWiWMNfcfO8bkxDh7du3iypXv3pWUAAAg\nAElEQVRLnD1/lrsOH+GN19+gt68bhaDVbBIFAWO7d3Pm/EWCIKQ0V+LlV15h2/AWgjDCCwI+9VM/\nxc/9j/+cwwcOMjM1zZM/9CRXL13mxMsvMz9bIp3JUm80cWyXr33964zt2M4XvvDT/MEf/hF79h3m\nqY9+nEsXztFRLLJSq5Hv7GJhbp7S5DiXz5wi8lt89at/yPHHP0Kuo5uJ21N05TKUpqfQuHT0DNHy\njdrg+e99m5/41Kc5f+kKfUODPP6hD9BohPQNDJHNFjh2ZA8pJXn+2e/TaLS47+gDzJZKpFNpBnq6\n2dRdxM5lmZibo16p0d/XR6NeI5tyGBwc5ty5C9xzZD+XL1xnYX4VqW36e3vpLHQQR5BOFXjhhRMM\nDo0SBpJ0toNWy2NqZppiVzfDg1sY2tTH/r37OPHKq3zw4Qd46aVnCHTEJz/133Pw8BEKBZcb59/h\nzKX3+NwXf5aFuQVeef0VOtMW2bTL09/6BhkpCYoD/Mtf+hVqTQjJs7hSpStj89xf/BlXr9/kZ37h\nV9g2dgBhxewc28nW7VuoV+vMzc3SkU2xsjTL+OQUH/7QhxgaGcEL4YG7D/43UMDLtS+LdjAxpmOO\n4iAhg5k3i46ODpRlMTk5gZvKrO1AIYHupCm2QiVGmMroZLXQ7fdv1n8HdxbvtYxhQCSWkDLxaJbm\nZ7fVKO2CtC5RW3+MxWInYRhQr9cQUuCmDEtWSzMztqFMoVQSChEbOdH7fkf747XPSdN86PZ0Kkzu\nkxYQR3EivTL7YqXWWfNSSWyhINJo3UIlu8FSuUZvTxePPPQQX//jr1JeXMR2XT7wwQ/zU5/5SW6O\nT2C7KcJECqdDsKQNGCQjijVxtN5wGVb5Ommw3e2ItddYI0ScTNZmb24lMishwLYMYBv6IY6dQUhh\nioSOsJICb/bjG3atyXO1lAad+JhLiKMIZSlCHSNFiJTguCm0shCWQxDGlEpzTM2VuXW7xMT0CuWG\nBrtApGxiaSGVMjpxKZNLwiAEOmnCFD6OMNppSYRr26TdFFFgHm+7wLUtPIWQKKGSa9BMqUoYgqFB\nfzCMXEHbOB5LKlxlm0ZFRSipzXQbRsn5NPpYZacgilBEiBiEsI1kTMcIHeJIhSVMEW1nkQkBQsYo\nqQjR5lpMri8hTaa2EiCVRRTFSKmwpCSOAoQESyhzLqVBD1qtJm5KEYRNQh1juRZhFKBiYxvcCnxS\nsYelQlrNesL1iNGxj9AhYdBCSYWUlpHvRaZZFAnLX9opQhEZmaeOkLa5ntASHUks18ZOdvJeEKIs\n28hEhUDoCC00vu+bVD8nRb6QRwrBytIcvV3d5DNZY7OKxHIVVsZh974jfOOb3+LQoSOsrFS4/777\ncFVEde42EQ5RGBNGMYNDw1iWTb3eIJPJ0N3TzeVz53jowQeYLS0xsn03J0+do1GvUl5aoHdwkNLs\nHOO3JxjbtYdr164SeD5Lyyt4zRU2bRrA81oU+4Y4fORuRgaHOHPyJNt2bOWffOHz/Otf/CXuuucu\nzrxzkqDVore7C93wSbkOCMHV69eZninx2KOP4wVNXnj5Jb70P/wcb7x2ip7eAcb27OLq9StMTtxm\naPMIXQODTM4ssDQzS0YHFFMW5989A8plz11Hee6lE1gqIufEnH/3JF19ffQOjlIqlVieK1Gaucbx\nxx6iVK5Q92Bxvk5pchK/ETI7MUOjMc3VGxeYnp3mnZNnuOfe42zfOUYqlaK6skBleZHlZotSucrm\n4UGmJ8aJgoCl5WUsJUHGhNjMr9Y5euw4ncVOWr5Hd38Pr7z+Gn2DW9i7/25y+Rxj+w5Q7Omh2azR\n01Vg3+6dbBroo+VFrC7VOTi2jdrSJA8cP4YfOrz4ymvc9+ADbOnr5sUXvsvkZInunhEmZma5cuU8\ncwuz7Nq5k0989IeZGJ/lS7/8q1iFblabATMr84xt6SRjh/ze7/wWe/eOMvbgRzh75goH7jrAjZtT\nnHnnLI6G/Tu3k0+7BD7sPXA/QWQxObNI2i3ywD27/v4X8PnV2pfNm1jiRiWgvbuWUgGaRqNBOp0m\nnc6ysLhEZ7FrDW43Ui691oWzwRjCHO0fqjfcj9/39fXjrzNeEdgIYYGWyd5WGhgVhe+FpFNZHDtF\nuVyj2fDI5zoI/MhYTCY/u73rE8oU8fauduPvf7/8qP2I2pyt9tRrJnjWYO32a2LiKE3Bj+MQL2ji\nuC6ZTIa049L0W2SzGT70wQ9w6uwZbk9Ns2X7dh566DjVMABbEYqYIIqwbIswipK9cfJ6JxP3uiSM\nBLtOdsy6fTOwu8bok4UQkBCfZGL+IUSEY7uIZDKL4xDLlmvTLEQgI9ARytY4ro3t2CjbBrIoK03L\ng2otQEuXCAvbzoCdo+5pyo2I2bkak7MrjE8vM7NQNpGEGiwnjWUZfkEYG+fxOEnxWvMX0KaotZEA\nIdQanBwLCPyAKNKECZwbxcafLIrjpDCutXvmPAkjj9NrzY1hc0uZyCLbu3tpnn+YNEs6Wk8SUwly\nE+vYNDBx3G5/iXWSD5ZcA3dK7pIVhFRmPbTWiBpdt4hBaIMsGchdIaW5ZpWtEoJbWz2BKeJSoaRl\nin9knrCMwJEKpQR+5BO0aiitDBE1sWYV0qbZbGFZKdMIxxFI1lLdRLJmCqIQISxkDJYS6CjGkhYg\nsZRFq1Uzr3sUk06lCAOfKGiiI28NUjdPO8YR4DerKBHjey0WSnPMzZXo6+1nx45tzJVmmZqYQMc+\nxWKaudIUHZ1FWs2YYkc3y3OTXL36Hnv2jLG4tEBpfoGOYid+GFJr1bBdm2Z5kVMn38QLm3QUO9iy\nbYTZyRtM37yCoz2GhgYIg5B9e/fgN6o0KitsHeylo1CgWq2BsHCyeUPgDVtcvniOJ554gsFNQ0xO\nT/Nbv/V/cejAPuZmZ5mZmqbWqGDbFh1dZvo8c/4ClgVBHPLumXPcc/fdjN+ews3k0Ugy2TTl1Xly\njkMUGPe6wGsw0NNJqTTHtckp7nv0cRotQeAH5DJ5yitVcvkutLDp6CgidYuRoU2srrZ47/YMm7ft\nolyuMjzYx96DB9k+NkIrqoBw2Lb9ALmOXpTj8uqLzzA0PECrUWO+NEM2bZEp5ClXy1TLDerVOkJr\nbGWTyWXZtm0Hr77xFvv2H6Qzn6eyssyB3buZmLxNNpdnx+5d9A70M7dUodxo0Wh5TE5NMjg4zOLK\nCpeuXKW3t8hqtcam0RGefukF9h05zIk3TnDx4hmOHLmXZsPjD7/y2+w5fJTtu/axuFDi2tVzZPw6\n+/ftxUqnePrN17jrwSfJWB2kAhfhr7B78yZ+9Vd/mVPvnueJpz7MoXsfxl9d5vqlW1jaYWjzDvpG\nt+AWOwkE5Ivd+IHP/OICW7ZtxQ9aPHDPnr9VAf87oQO/OLm49iDavlPt4qXaECxRsotTBEGEFpLF\nxUVs22ZwcJBms0kQhetGGX+LYyPR7P3//mWmMG1yD0KYqWiDhrzWbOCFAYVCJynbwfM8hBC4tkMU\nB8ZdawN8/9f9Prmh0Lf/jdBrVqsb9eZKKVzLptIo06xWuHnzJt/+9rf5/f/8Gzz14INIy8Q5nj59\nhhjNffc/gGsrSqUSOpeht7cXopj77j3Kz/7Tf8ZKtUYs1j3qhWA9rlPECZlQIlX73P1galzbXsQ0\nFzphHSdJXsRYwhSwUJv9F0iksrHsPEIoqvUGN8enqHuGoez5PlIqHCeFki6eFyCUItRGIx/65t90\nOptAqwZWNY+nLU0jicFcf52N29dfbeOrsc0OXmqQEVIZpzwdbjClSZ5nG1EBQ7LSWmMncLSUECT7\n2zCI185jW8GwxgdRKsn8itdY4kizI1e2nbzhmcIWo4mE0agjBVZkZJciWTO00RKtDRojIlOOhVDE\nKEIEaEUkDEoQR0aahTSNoIG9jemRFKADH0dZaC2IQtBxiJNyDDqhwQ89qvVVelwLGfrUvRbNKEK5\nLl4Y0dnZiWW7SIx/fxybtUqzWTfnSFpI20GjsIVYI9MZNYREaoGyPaRUTE7PMrp5mHp5hYWZ2/R3\nd1Itl/FRpHMFGi0f1xKkHCNjW15YJBaSdCZLJpPhypWrrMyVkAq2btnO1s0j/MZv/h88/NgHqdRb\njA4NcPXsc8xNTVDs6mZ0yw5eefV1PvDER7l2/SaTM9P09vfQqQMGOjsJEbx66h3233WErlyeqWvX\nESIglCkilWZmboFPfvLHeP3l55ibuk1fXx+2k2Zo8zZqXsihg3t57ZVnmZm4Rf+mEYaGN5MrdNGo\nNvjm17/Kgw/cz7e+9V947PEH2bxlO/Pzy2zdsp3Kapmnn/kuqUKGq1evcv+xh3n8Ax8DlaJSq/PW\n26+wc9sQjlRs2TbGufMXefDYfbz9+mtcv36dnfsPEmMTWjYyjikUO9EIfK/FammKrnya7kInN27d\nZr5S5+BdR+jp7UdoycjQELcnZ7h46TyplMvuvfsozUyzY+sQceRz+rUXePONk/zEJ/8xS0tLOOkU\n06sBH/nYj9JoVpgan8BSgnw2w7mzpwijiB/+hz/Cs88+w87Nm4mDFi89/xwH77qbLTt2slSt0PJD\n+rv7yGU70FpTyKVpNipcvHiBKIoodPUwOjBAT1cHjcYKExO3eO77T1MsFpmZq3DgoY9y7rk/4buv\nvMFv/e4fsHVTD//Lf/wPvPj9p/nZn/4cJ0+/i8wX+eEf/++oVhrEAmo3T+P5dSYmJrh9a4r7H/wA\n71y9RiGbws2mqNSqPPjQcdA+jtTcdeguzl+4SUdnL5cuXcJ1jQfDf/6NX/2rp8W/wfF3goXenk6h\nTTTSa0QmJZWBRZWdaLMFyrYJoojh0RHm5+e5efsW3d3dpFKptYKx8fjBiXqj9OgHj/d//x0sWx2/\n72PzmKUUhHGE49iJXt00EZlsGjuwqK2uEKZS5PN5oiDEazWwLON2tdHTuS27WicBa9qBKgmCm9w1\nd+w2uSyOkmYASgsLTExMUKnU6ezMk7IFw/2b+Nxnfordw3302jZvvP46C4vLdOezlKs1SuPjBEHA\nJz7xCcbnZ4ljYwbTLJfRYWQgyqR4g2GTx+0JNZHhmQIRJcXuTpY4GE6DECqxhRV4QYQQGsuyQUaE\nGNjZcR0sW+JHprCV5peolBuslhtomcaPBVrauIUskR8QxMmqQSkiJFguMTHZQj+tVotK3Tcwsi2T\nIBBBqNfJd+3Xfm3iloqNioW2Qcza9xqvUDM1hhE6cUNTwqBFOiHZ0TbxiXVifPJ+pEWtydsSy/g7\nrr31vX77pxoUQEgzUbbtVjXGBS0kJI4jhEzkXVqt+RkAJhKXCCnbBkKYKR5l+BRCEwujz3Yshyj0\ncC1FqENE8lYhNLjKJgp84sAn8GtY6TS2nSOIfISIaQUNYjSu7SBsibQt4mZAGDYoZFME1TIijrF1\nRFDXxLZLOlNEooh1hO95ZBwHPwqRSqCFyQDQUYSWxtVOCo0kIo4jAr+B7/vMlSZo1VcZ6O1Ehi1q\nS7OkXZtcKsVUaYpIC9yOAq3Qo+X7OJag3mwQWBYL9TrdxU6ieoXlpQXeu3yRbCrDIw9/kMtXrvLE\nD32Yt0+ewMnmqXse3baFk3IpFDrpyHdy7Ogx9lYqnHr3NIOjIyxMzXB7epLunl5Ks/NkRtO8d2Oc\nnp4iQrQYn73C4OYdIBWNwPiJr9bqjGwdYGZhmeHhEYYHh8iksgwNjWC7aXp7e5mYmGFpcYVapcro\n6DCZTIryyirLuSW8VsjK4hKTN42s6uWTb/ITP/GT3L41ybtn3uHo/Q9we/yaSSxbWaVWr3D1xiQD\nAwOcOHGCt996i499/ONMzy0REXHo3oOUyyuM377FyOAm8rkMK0FAOt2FZad59+x5vvwr/47vPfM0\nRw4d4NSZC1y9fp1NA0M88tCjlMtlTr59glazQqMyzabeHnaN7eXZp5/n5Fuv09vbi2w69A4fYrHa\nQntGOdPf18Ps7CzDIyP09nUzOzXJUG8vzz7zXXyvzv0PHEdaDp1dXWzfuZPFxUVeev5Z/GbArVum\nFszOl1hdXSabzXJ7cooPPPoYXVkXETW4564jPHjsQd46eYY3T53m8R/7PD/88Y/yzMsnWCpNMDbc\nzcUL71Es5Nk+tovvPPscn/7kp+gs5Bko5rh85SyFtM3FqXkuX36PX/43v8Lho4/w6rnzBEFAvV6n\n3qhx6+ZVRvuKNCvLfOdP/pxMvocXnn2B0A84et89VCsrP1B7/muPvxsQeqVhHkRC+BGsJ5IZFrj5\nbKwNLKmTCbPleeRzObLZLMvLy2te5m0zlf+/46+Dyt//9fff18lus/2xlAbOazu2tYl0AoHruLi2\nTeD7VJZXyeUyuI6N73lYsh22AesQ//tv5mvtffvGWxD4NJsNHMvi+rVrvPb6CXLZDB2FPMMjW9i2\nbRs7tm4jn83SXeygI5dj374DvPPuaR585CH+19/837l48TyrK6tYrs1XvvY1zp4/wyOPPsy//oV/\nxeHDh2h5Lfw4Qisj24mjkEibN0/NhjxpzdrHG9cSGydx0zQZ+DbWAiltlOUQSUUQSYJYEuOwUq4z\nM7vI5Owi41Mlqo0WsXCwUlkiYVjgcRSDsEy5jCVhrAEjb5LCwnJcbMdt53IQxsYbQEtQlmPIitGd\nwRkiWRO0oW1zjt+HyGgTqyERSNuY+0ghiBOPdMl6E9oOhJEJUQ9EEiCSvC4JerM+Hd+J8JivtR8X\nINb9C6LIT/LFSZqFtTJvCGNS3mFxsDF1bK0RlOtmR6GOzc+XAh0GePUKrmW4BmEc4VoWoe8RNGpk\nUxZ+vUyrsUIuncYPIlLpHLHwUY5Fo1FFSrBshYg14WoFohAhJbatDGogFHEYEwUBQRAQRUaR4Lda\nZFwLHfpYUhJ4TUQco+MQO8kwsKQgajXxm3WazRV0HNHf2021vMzEzWu4MiblKLx6FWVZ2I6N32zQ\n3dmBm3JJZbLowHgRpNw0q+UySggKuTSFQo50yubMmXfZuWOMd8+eZte+nQwNb0KELsvLi1h2mtnS\nHI2GaUrDIKRWrXHx/AXclE1HVw8DI6PML61w6vQ7HH/gOG4qxZl3T3H/3YdYWVpianqKwU3D7N+/\nl+XleSbHb7Nj115S2QLXrl8nn00zNXmb6akp0pkMUayp1Rr09/YztKmfZ5552qgTlCKKYGzHLkIv\ngCigNDPLvoOHKM0tsG3bNgqdBVZXy6RTKRYXFkil8jx4/3Eyrkshl+Wb3/wmW3eOsVJv0DM4yu4D\n+7lxfYqFxWXy2RxbBwcJWzWUkHR39XL56gUuX7/O2M59dHR0MNDfx+btW7FSDulslonJCZaWFnjo\n0QcIwxb1WpnV8hLTt6d46OEHmZmbwnYl+w8cYHT3PlQqxWsvPMf1G9dYXVlhcNMmNm8e4ca1a5x8\n+yRH7zpAs1nm8pXzdPf0cOjIUd555yxf/7P/wmsn3uDgwQNMjk+wb98+ytUqu/bsYcvWbRw//gBp\nV1H1PIRSnD93jnq9gRCK3/nd38fK5bl28waf/eQ/4Nmnn0ZHIe9dusirr73OUx98mM5igZdOvM4/\n+snPYllZhvs6eOiefXz769/ga3/+Hb74Mz/HwXuO8fwbJxke3UIu3UV//zCjm/dw8Mhx+gdGGR7Z\ngpvOcvd991IsFimXV2hUyhzct5fjDx//+78Dn6s2vkzyvrku/RJrBJ9Ya7ODS6bA9vTX3vnGWtPR\n0UGjXqdWq2Hb9prRxF+7z/4bfu2vug/rE5UQBsKUCYms/TlLCyI/QIiYXDaH4zosLS0QxxH5bJYw\n8s3PiU3ghNjwe9rTWbtYR3GU7PrMpBXHhgmdzaRBaAq5LLt2j7F1y2a6u7tw3BSh79NstKhUlqlU\nKly/Oc7o2B4aQcSV27f46Mc/xtLSAiffepNiTw+f/sxn+MOv/REHjxxm09AQ5arZr4VhRBD4SB2v\nEdiEeaBrr0G8FjoS3/H6mJsAJRBKEYQRKEkqlUEjWS1XuDq1xExphanZJRaWa5QWyqxWffxY4qaz\nxEIRJFB7GIWI2BDG4tAUSm2CIxHEJL44NOpl0BFCmyjLOI7WMtN1onmWyjibbTw2RtpunNI3Hpay\nTSOgFOl0CmJtfMPb123SaLYHeS1NvKaU6+c1TkJSDHFTJ0x3TZtJfQcqwBod0DxGAXHkowMjaQxj\ns3yKkkbJOJ1plDaoCGzkVKw3LWvKAMFa+KlC06qv0igvUF9dpFDIgY5wJIStOs3VeeorC8g4IGMb\nnoqSKVqtmFZQJ4x8XGnh1+pEno9SYMuYKAyJtZGYhX6ArSz8RoDvG96ATB6bLUkQpdBoR6LQFHCB\nQeJic54jv4XfrICKUTKm1WjQ3VUkm3aYvH0Lv14j7aaRto2TSjM/V6KQsgFYWlomnXJZWS0zODRC\nd7Gb69evs2fXThqNOumUYveOHVy/eplLVy7Q29NDIdeJVzU8h5SbZXWlwtDQMKdPnmR4dJgoDhke\nHqDajPFwsNJZhoaG8Lwmly9fYnB4FJuQ++46zJX33mPfgSNcv3Gd82dOU8xlqKysEsUxY7v30qjX\n6OrK887bb9HX28PM3DzDQ8P09Q0QhSGtRo0bt24Z6+mhTWgEmXSORq1GypY06jXefvcsh++6h5WV\nVXp6+ylXyuQyecZ27SKTK7B1yyitRoO/+M630DrmrqPH2L77AMceeoQrV2+RzmTo6+1FEVJZXcSW\nmt1jO5kYv80LL77Al/75v+TkuQvs27uXdDpNpVqls9hF10A/gddCEvP222+wd+9ORgY3MTs5yfZN\no8wtLnDgniP89u/9Lvv37eXatRsoR9NV6ObDH/4wA/0DTE5MoKOYVrPOzq07uHTuFIMDPYR+k4nb\nk3z7O89Safj0Dg7z6Ic+SFdXN4VcHt9rJQqdmLm5OQSasW3b+dCHP8SWrdvBcrl45RpnTp/BazUp\ndBTwvSqPPvIYCsV7ly5w8u03kBI++Y9+hD/82p9w6K57+chTP4rjZpgev8x/+tV/w+XrN9m6/27+\n2b/4eRbKdSphgAibpFNpbt0epx60UG6KuaUFgjiku6+b6bkSo6NbePSRx0i5Lo1GnYceffDvfwEv\ntSfw5NhoArK2C1dqzTRCJIU9QiMthdAGMszn8ziOw9LSEvl8/r9qwv6rvv6DcHqcWHSasAWSece8\n0Zv7UgqTY6VjZMLo1STSHSUpFApEUUC9UaOzWEAk5CTDszHkozgyHs9RGBq4lg2TvmWMOMy+VBMH\nAaHvAxpLSerVKl5ipZmAtKSzLplUiuFtO9GZPFu37uA3fvP/5DOf/hRXr1zinTdfR1kWn/nsP+H5\nV17g0UcfIZvLmGIdBihhEAahk0ZDaEQSkNEeAtf38/H7GOptNMVokaUyVpye5zO/sMjk1CTLniLE\nIopso5PGAmkjRIo4FkYLLyGIPBzbQaGI/RgtYzQhkhghYqLIx7EdhI7JWJYJ4ooTS1NpIYTESPvF\n2hpCx++PrzRIwfvJhGvFTirA7OuDyCfSxodcJo2nknKdqChFErkJtkzkbtqsgto7Ea31HZ747dVO\n+zVUyWvdLuyhid1CBz6KGCvlEIQgLAVaE0a+abqiEIWVTNvrU78QCTwvNSTnRgqj3beITZMW1HFl\nTGVlgWw2Q+gHSDSOJbGFT+A1ULGPrQS2mybSLlqn0FYAkSZnOziRNrwGS5sAnVYTyxZoHRAGHsQS\n103jplIEYYhUEt/zyGWyeI2GkcCFgbn2o5hYm3CcKE5S1aKQ0G/iBXWklLi2je+1kLFmbPtWmvUq\nN8ZvE8aCldVVHEvRWF3Gdh000PA8spksStk0600spbAsje+1qJVrxJFPd3cHUeAzOTXNwkKZyIe+\n7l6KnT20Wk2y6RSFjhw7xrZx8dJZOjrzLFUtdu8/TLGrj8DzOLRvP6dOnWJ2bg6XCNexmZlfZqFc\n5Z6j9/He5UuUpm/jSsH+AwexU2mEiFlemuf61as4bgoErK6W2b59JyvLy/T1dDM1PcWtm5Mcv/8e\ntu8co+V7NCpVapUVuru7OHv1GraT5uzZc/QPDJLP5ZlI9OMrlTKzpVl+9/d+mxs3r/LEE08xMDzK\n3gOHefW1t1mYW2Lnrh1sGRlgZXGWTMpmYX6WMPQ49c6bEFp8+rNf4PKtGwwNDRB4PtVKDddOs1yu\nkLFSNMsNAn+V5cUZRBSwZ/sYq3MrXB8f5+EPf5DS/CK/8//+AXt2b2N25jZh6CC0pK+vn9HhEZqN\nurHmjTWvvvJ9smmX5YV5wkAztusQxb5hNm3ZyuzKAi9//zniwCeXTZPNpKlXy2zbPMq+PWPcuDbN\n4uwEpdlZCp09jG7eznxpjma1Smchz87tgziZIoVcB+XlBSrlFfbs3skTjz/F7331q/z4pz6HZRew\nXJdf//e/yMrUe7i9Q/z8v/33rNR8pLLoGejjT//o/2ZwcBMDW4dohB61Zo3eniKtWoWOfAdOugOl\n4NatW+TSxgzp6H13//0v4LOr1bUH0Z4Q1u+b4y/zwRZam5tYn2AcxyaXy1IqTSMluK6DyfBeh6TN\nRBuhJGYU486b+ZpACtZUtW2pkoGDk5+XsH8lEqWhrS8X2sQ8KiHXHqMlBTKOkXGIin0Krk1GaWpL\n82QthYg8lI6wpMYWGtuCjOuQTbtk0y620FgxpJRCxTFRqwVBQOwHRLYw0XuJf7W0jPWrEq6xB1U2\nAosoFvieR7NSZkt/Ny+/8Axjm4dQIuaZP/9zitkMH/+HH2V1fo4DB/aipJnJLMtFWhGO8HA1YFm0\nIoEXkzDwY6SIEJGHLQ2hS0rLSKowTY/jWETYRNKi1gwZn1xgenaFSkMT6BRoZSZUYbzl2zC1+dlG\nz2xLhdIC3/eJI41yjbQtDOLkOSqkBlslwVaYpkoijQd3cgVIbabNOEqarLWccAMha22KmNSm+VJJ\nc2Zgc+NSpkRspFYadBAl06uBtYUAZSUs+jA05KuExGekZW043JRVAys7hrQmYvWVcZ0AACAASURB\nVPzAM34l0sgOQ20RRgbK1xaEaCJtijXeKo6bXtvbR6FPypYQh8jYaL7bUH0b3dIadKyQOkZJE7up\nEUbBhkTEAjsOKM8vknUigvosrpUk9cWe4TLImHwuRcv3QaWx0jZCBTQ9H8dN43shrm1RrS4iZEBa\nCJaWazSbVQodOTQSXwd4UQPbNWYhuYyLLTWuI9FxgNesk3IUodcgl7KpemXi2KeQdZGRh1dZgsgj\nn0pTXlykqzNLs1FB65BGs0Ghq4u0VJQmb1CZn6Qjl6Nch1wuRzHnsjo3hysM2kDcxLYjzp8/Qxh5\n2JamUVtmZaHEfffey8uvvMLUxC2OHR4i3z/CzFKFHXuPUPcFlUbA1I0bbBnZwtbd93Ht8vdZGr8K\nrTmiuILtpNi9ZztTt25gKZer713CUoJWo0YYBZRrNTp6BpiYL3HxynuUyyvsG9uFV2syMz3N2M6d\n9PcN49VbTN68TbNWRsrQhJ4sz5uGTGiajTp+FDO6bRfVukd5tcTxY/cyNLKZcrVJR0cR4eRwC72U\nKxXeefZ7zE+P8/nPfRbLzaKcLK+/eZKuzgKPP3iM777wEsXeATLpPNJK0b95C8JJ8d1nn+P4Iw8g\nVchiaYFdu7dwfWKcjs4RsvkinZ1dfPXrfwpKM9Q7jJvKI5RNd1eRdE8nW/fv5xvf/HM+8eQTzN68\nwo/+yKdpVELmbl9k+uolLpx5laa3wPziLDembnL5ymVyqSxPfuRJJqem2bVrN1u3bOXgwYMszM3i\nKovhjgLZjEUxm6HQYdGiyuLsBJfeu04tWuXwsaMI1+W1109z933HeOTJx7hw4xZ79mznyqm3yXUV\nuXrlHB/7+EfwYkkqnWFzb5E/ffolnvqxT9Pfkad0+UXeeONNRrfexY984RfIF4ZZLq8a7/iFRUYG\n+3j+hZcodnazZdsOYqmQSpBNKRqVJRqNZXKZDFHgUauskkulOfzfgg68VK59+a9ief91R3tvaO7f\nCXOn01lWV8tUqzUymRyumyIIDLPZMHITK0kkFiopvBKZ2IMKLTEKqPXPK2EZ1vEGyFW2DVbaE9XG\nI9boBG4OfR+ZTOxSQBQGyS5T0mg2yGazpLJppFAoux3eEhKGAUFggiL82LhqaQGOrbBtC2nbCNs2\n8GOsTbiHTFYQcYjBKWIQMZLQFEOh6cznWVlZ5sK5cxw/dpQ//spXkELwYz/+SW7cuM2+AwcNHJu4\nhQkdYUuJpSSxNGEXtiWIfY84DIi1JJ0r4mtFvRmxWm1RbUYIlcKPBHOLZRaWyswvrbK4XKVcaeCH\nECcuXG0jl43Trly7b17XdviJ5djEkSbwfWzLaICVMteCkmJNemgKZFtzTwKyrxMAzaHXmsaNv1sl\nedJrHtvizrNryIzrTWZ7tQECnTidRWEMycRvKTMRi+QyibUmSlZDG+Fz27JJpVyzHgoCE/cZxohY\noxQmolNZiaYb/GYZ202jpY2yLAK/hRICN5Uy5EplkB9LCSJtdsjG9z0hiibSMrVhbaA0xGGLRmMV\nS3roMCSKpLERthWWdE0MqFKEXoAUxiffshSB3yLjukhiQq+JVBovaNGRzeIFMSvlBVKuwvM9Mtkc\nUgpaXsM0FFIm1r8Rge+vpeuZ86pYqVTIZHKEYUDk+cSRTyblEEUhKytLpFImKyEIQ7xWi1azTtp1\nsG2barXG1NQ05VqDtGOTz2WIoph6o0o+l8VWklq5jNKa965cZvPQELVqBa/VolZvgu2QSqU5e+oN\nOvpG6O7rZ2z3Dq5fu8yWLcNM3DhPEDRYbdTx6xV2btnBzPQs6XyWRiOk0WiyUJpjenqC0dFhojgm\n39nBwcNHuD0xQU93FwLN3r376Cl2sbK8zPLyAvV6jWP3H+XShctcv36Nzs4OMuksJ157lUJnJ/Pz\nC4yN7eDatWtkMhk6C0X8VkCpVOLGzffYtmMXo5u3MTw6SndXNyvlCk9+5CmymTRvn3iWpz7yEbZt\n3cFb77xLOtfJ5q3bGBgYYGFxjvseeIhcLk3se4zfvE6jtswbr73M5K1rbOrv5tL5c+waO0A6k8Jr\n+nQV+1hdWuL2rQsI3aKrM8vwpj7Gb9/i3LunWFpa4MW/+Au2bhmlkE0zffMG+/fu5q3TZxHSwmuG\ntGK4fPkqaddlZbXC8WP3kU7nCIOQzkIHURhiOTZWLs0bp9+hd2SImcVFhCvJFfs5e30KT9tEVY9i\nsYeRLTvo695CvRoxfnOa++6/lzdffxW/2WTnjm28deJFZNhCOmkcBTu376BebfD4w4/yzT/7Bjdm\nS3z+i18krFf4Vz//JY49/Cj3Hn+Y0d2HmZqeIZW2kTLGkYoD+3czNLyZGzemqNabZDMFLAQqjrGU\npFxeJZ/LkHIsVhcXqFUrHH/o/r//BXyuUv9ye4r+mx7vh7c3vsm3yVJdXV0opVhYWMD3fQqFgoEg\nEyjeUiqBmH/waDcHa5B9ex8Zh2bCTkwxzOci4iiE0DDBgyAgDgLiKEToGCnAtiSuZaOkxLEtHMvo\na1Op1BrsX62bcIkwDPD9YK2YRFEISpBKpbFtA4nGGCa00MLocGNQyRuxJYwtqS0jLAlKxEgipNDJ\nxCXwmx5Dg4N89Q9+n0cffZQ/+spXyDouj3/4QyxXauzdf4CW52NLA0NbSpBWCl975nkJII4IPB/b\ncomFTansMTu/yvR8meXVFitVj6XVBkurTVarLWoNj6YXE0QSpLEnjYVhjlsbiuFaIU0+DgJ/7fNa\nJ85vUmFZFr7vrRVSKSW2ZZuCZdlEUQwJgz8WSWKpANV25AE2kgR/QHe/4XJsf3fbGW4jz6FNQjP3\nDW4Q6dh4gStlzqVmTZkQRZGZtkmiV2NDyGsXciEhDEyDZ1kqWacEpFyHWAck1u6mOYyaZHJ54gjC\nyLioeX6TlJsmimPCoMVael+YNHCWCcExkISRUYikYZIIbMtCyAjPK+M3q+TTOZN0JwXKdmjUW4SB\nh4giFhfmKHQUaXlNdByRy6TwWk0cpXBtC0REy2+AF+OHMXHskc24lEpzdBTyxJisc78ZEoUJSS2K\nWFhYADSB5xNFAdVahUwmi0TTajSwRUzkN2k2VrBdi76eHvzAwO1eyyPl2vi+T7PRYGhwCK0FS8sr\nFIt5Kqsr7N29h0tXLkKscW2bVq2KDgOqKyvUVldRyqIzl6enuws/0ozt2cfk9CQyajGzUmV4dDNS\ngFSSK5cvUpq4SdqxyHb24DfqdBZ6GRwaJowjOjq76ewsIqVgYnKcp558kqef/T6jW7bR3z+A12wi\ngUcff4wLZ8/zhZ/+Iv/p136N6ZkpEDG3bt3AcVL0dPdQqVQozc2RL+RxnRSR1kxPT2ErG6/ls337\nGHNzi9x77z1cuHSObdt2MT07h5tO093TRblSJp3JkM+mePfU63R1d3P54mW6uvvo7O6js9jF2XPv\noqTk0tVr+I061aVFyouzzM1OcO3KeQ7t282unTsgDkm7eZqNKvXyCqXx25w88RKVyixZW1CausnW\nLSO88fKL9HV3USwWqSxVuXnrJj09RWYnJ0FrXjrxMv/4J3+c7TsP43b0sXXrDlxlU6vXqC8vge3S\n2d3Fqy+/Qm+xm1u3bqNSWVoR7N93mPJSlYHRUVZWGzzwoSdQ2MhKwKaBUXq6ByGCXLaT3WN7kKJJ\nT3cHW0e30pkvsFCaoKcjz3vXbhD6Pgf3H+K1197gvqP38uu//r/xM1/6Eh96/GFe/f53+e7zL3Pv\nw4/xyGNPstoKTLaB18BJ1ritZgPbyjCyeYzLF68gohgdxtQbLarlMqOjQ0yN36a/t4vS7AxL8yU+\n+MSH/v4X8NKGAr5G4kn2dndOPXdC6xthdUOAW5feCKEJQx+lBB0deRqNGuXyKo5jJpwoCgy5Ryc6\n2A1QurG/TBi5ov02GxuSVrLfjaKIMAggjJJCarKllRRYUiYTqoXrWDiOjSWEKfLE6CggikxAShia\nTNxsNkcUhlTrNVKuSzabu+M5KiGJw5jQD8yk3S42cYwVC2QUI6MY1YZN4xhXaCxiA/miTTeoMYEj\nGkZGhnn+2WcoFjt48dmnCT2PBx99mEw+z8DwIJ7nY2OmWcsCv9nEcY1+PNQQRgKkDVaa5WqL89cn\nqbdCQi0RykUoBz8U+KFGWDYIG4SFEMb6MxaKONkDW8l6447s9OR6UEre0UQZZdZ6wQ3DcK2gIoxn\nfBiZjLc4Tkxn2kVbCNO0yXaz0L6u9J3XlTZXn0r+z8bCvq7wW8+rXz9XABrHttcUERKw7SSCM5nq\nbdvGdhxMH5YUUSHQUYTQpjlzlFxbA4RBgONIYmLiSCMth0a9gY6axFHiIU+Mpcw1gRSEQQhhgEye\nhyHOaRTtzHKzqoiSv4EoNtenpQRB0EAQ4Dea0PLQwiOKQ/K5Ip7fQhBjK7PyKOTzhMnqQCib1XKF\nzq4u4ijEciTNVh1HWCjlEPoN4sjHtVyUsmnUq4hYE/gRTmK6oqSk1WzSaNQSYqRBO2wlaFSrRIGH\npWJ03CTwa/ie4R+srpRpNJvYlpl2eru7abZa9PT2kUnliOOQpcVpmo06cawZGt7E5MQ4jVoZR0ha\n9SrFYgeuZVOamqQjnyOTzeOk05RrDXSs6SqkyfV0c+nKZTo68/T39lKamaK2ukh/Tx9H73uQWCuy\n2Tzlao2u7k4KHR34fkCzUSedSXHj+g38KGJ2tkQUaUqzM+RSaToKBd45eYp6vcEPfeQplpYXuHz5\nAsPDgxy7936q1QrLyyts376dbTu2MTQ8xM2bt+jt66dvUz9Xr15j9+69bN++C5DcnrnFwMAW3JRL\nuVzGcR0a9TpB4PHic8+Sz6Tp6+kjCkJ6ensRUpLL5xkb28Xg4BDLi8sslmbQzTrTN69x4cJptm8b\n4cHj9zE5MUEhX8RWDinH4uK5d1kuTbB5UxeVRpV9O7Zz6MABGl6LkU1DKASdxSKbh7Zw5PAB3j19\nmrvuvofbk7N4OsbzQvbsO8qthUUOHDjM3NQUjVaNvs4C9UAzMTnFkUMHyLoppqZm2X/gMLlMBt2s\nc/fOrZw9c5YDu8ZYmJmip5Al60pGRoaoVVYRdsDM1C0mJ25QKk1y+uQpvve9Z3n2+99nYvwGt26N\nk3Zs+nr7WV5eZmpqilQqxTunTyOV5vzpt1lemGPZC/kXv/BvqTUjanWfjnyeer1M2nHRgO2kmZ6d\nZ252iUN797A0N8v2rduYW1wiV+ikVl6hUV2lVa+hQ5+OXJajx/92E/jfCSOX0+Oz+g6mt2ZDIf/B\nCXld7iPZqJNZZ+waaLrts93O9W6HLiwvL9NoNNjUP0AcxPi+nzhhJZKaxLd74639e1Xsr01bJtYz\n2kDWWmcMt/+fa1koy4x/JqY0QMfGoMPIzQwxTAhD0CF5g6/VatTrdSzLodCZN3kfsTZWsXrdPMbX\nAQTmTQ61DoOaoIr159N+HXRCi1aRxnIUfq3CFz7/Wa6fOUUhk2Xs4H7+3a/9z/QPjtJoebjKATRO\nxiFoeaTcDPVQMD5fZnahStOLELFGKowJSKxRyjB9W03fwMK2jbIEIpKsOdJLI1vScbuw3Gng025O\nzGsbrUHZcRwT015hCMIwMPeU8ZH3fR8nlbmjsIpYG1/upDFUOiYy+aXm94g7SWxxHJtVRLyxmcQY\npSTXxl/mnNc+p20Tlvb3KSHW4jzb1+kaC12YGNggyURXSUOihERIg3BYrjFOiYMQbUlQDl6oSDk2\nfnkeAWTcFMqxUUqwtLRkiI5CIsIWEZp8Pk/T95FWCjudQSNo+MGa5E0oI+0KPJ8w8HAjj2Kxm9rS\nEimWuHnrPXIdPQinQL5nkNWlZXQcknFTZAodrNYa+IEm11mk6fv09/SzWJohlYJMzmV5chbXySFE\nC6k9pqdN8le+kMXzPGJhzler1aJSNkqSfD5vziMRxa4uZidu0tPVlaxsAhYWZ2n5DVwnRybdgdeI\n6OrtxAs9vFaAa7nUWy0QgmajQUc2TWnyBtPTsyAkHR0FLKXo7+8laHlksinmFxdZWVmht6ObS5ff\nY/fBQ3T0DIDlkstl+A+/8mW++KUv44eakaFB3n77Tc6fP8vu7QMMdHUwMbdMqqOXXTt3sHV0M3/x\nrT8mlXIYHNlNvVXHVg7f/+434P/j7r2CJMnv/L5P+ixf3dXVvqdnusfu7MzOulmswywW5nDA4XBB\nMWRIUUGdQqKkUEgPiqCCkh42Qg8K6U16kDkyeJREho5nBN4RZneBAxZYg/UGO7Z7pr0vb9Jn/lMP\n/6zuWYiiHvRCXE30tKnuyqzMqvz9f7+vSwSaaqCqKtPTs1y6cBHXd3jzzTd58cvPo6oKnj9ge3uT\nYqXM2uoG/Z7D8y9+JXOmkwTXra1N3nr7PW7ceIF+v8/29i5hIJiYmCBKhvzbf+vf43B/F8PK0Wi1\nSZOYsUqJ1177Mf/pf/Zf8M4v3sAyUs4/ch4nCOn2A+bmz2JpBRIlIqcLtMjnz/74H7OwfBqzkGN3\nZ4/65ARhbPLMjW+RL1excxprqzcZdNpovk85X0aoOrESU7B1vnbjBt/73veoVse5dnmB1bufU52Y\nY3HpElv3bvKHf/8fcESR/+Tv/j3ee+stLEWa/ExWStzc3Oc73/waqyt3ufmrT/nGb3+Hf/pnf87v\n/d7vMZ43eO/Nv+Q73/pt3vnofRobO9xa2+RIUbi4fInpiRqVQo5mYx/H8fjyi9/G9UNUI2V2/jRK\nEvDWW2/h79/ms1s3afeGvPSVL/Oj137M5uYmE+NVTM3GCQR/8E+/jx+pNBod5upjrN6/TbFcYWJ6\nliiNcZyAfM6gaJvsbawxOzlJu9On6/osnlniYHudnBoSeQ7zMzW6nSb/1u//nX85k/r/4/avRAe+\n3+u/oijqSeeTFW3toYvnF2+jjifz/FZPLqAy3EB25LJTjvE8T2JjUUgQ+OTzOQxD4+jwCMs2KZeL\njPzXdUNDNVQ0Q5PzUjVFkJCk2YcfSDw6joijGJFFkirHFpXKcYclpTxJxiqPUXXp1KYoMsEpiiJU\nzUDVNCIhRwhJKvCDEHQd07az1CuBYdikiiolWFlKWRRn3u9ZljWqxHlF1oEr6ihzXOFk7iqR4DRJ\n8TyX0wvzjJVLvPPzNzg6aPHVb36Vf+Nv/A26/SGKomNoJpqh4yQxppmn7aSsbO6zedjBizUsM0+S\npCRCyTLCJbGLDI82DR1SgecMMdSR/3c23UCakahKSpI+1OU+PMYmCxRJ5dQjzdzasmeDlvmoS8MS\nTfrNi5QoiuSxyaYjqSJfLyOnP9n0Zos/hS8svk468Ow2WlSoKqqiohnGSTLX6NWoKF/4EGl6fN+I\nPJaITJutahk1Mh1x2Y67eiUjlamadEFLREIcDCCRr6F8zkbVTTwnkPK3yGN3a5u5mdmMgS7QdY00\niVBIsgQ4sO08fhih6LpMKUukrEuVJgvHCzwSgYgSfKeH57kUyxZK5BP6CbqR46h1hGGaxFGIbVh4\nvkN5vIZAA8VE1WRaWM6y6DVbaCpEQkIgQ9cj8Pv0+205UbBtoiSk3WljGAa+71MslPE8D9O0mZyc\nQtN0HMej1+/hD7r4wyFqKi/uURQhRMrm5hbT9SlcN8Bx+8RRkNnNGrS7Xc4uL9NuN4gCH3c4ZHJy\nkpWVFQxdpd/v4bpDVF0l8F1SkUgpkqHhhyG5QolOp08YJaiayt7uNmfOnMfUDbx+D01TaXfa6GnE\nRKXKxNQcZ88vsb+7jtfvowgP3x2iGlUSTcP3HO7d/hW9VpszZxbRDZ3FU4scHTZQVIU3fvYzTi+e\nIkkDbt++zfVnn+HMmTOYVoHd/X1u37lHkirMz01zf+0+ruOSK9jcu3eXa49fw8rZlIolHqyukjN1\nTp87T5qEWDkb2y7RarXYWFnhytXHuPfgAWHgc+78eXZ2DzByeXKFEqcWTmMaBq1uk9mZCZoHm/zk\nL19jfHKSnYMGC4vLCF3Hztc4tXyRQnEcxxkwVsqxfOoUIk3p+BELSxfQdJONnW3urNzh3Nkz3Lq/\nxurdT1lduYVZqHJ/64CNu7d49vqX+Cf/158xMzlJfaLC+HiRwWBIdbzKzv4+h4cHJInAtgqcWlzk\n7bffJIpDitU6tanT/A9//x+Rq9YwiyXOX36Mr3z1uzx29TpPP/Ucu4cHlMp1Ll2+hpWvEANCM9lv\nNnGdIYpu8farf4Kma4zVJrl06SJ/9r3vUy7l6HQc+k7C3/0v/xs+u3UPU7eYmpik0dzDzsn38cHR\nEW7gMjkxSej2qOQNQnfAcNBG0xXcYY80jYiGfTbWVum1j4hjj1bzkOdvfO03f4S+3xu8cmyKghxx\nqhmuOQrqeJhBPvosmzSph47jiCj2SURMmgqi2CVJAlASNB00LSUllmPINMKwFPJ5i36/w9DpkyuY\n2HmTKJGPIdKYMPKJ4oA4CREiIiVBQ15c1ewiq2lZp69KTB2+SMQzDB3dNCBJCKNAWkE+FMUIqvTQ\nJpPHqLJAKFm3rOtyJBnFEXYuh26YxEkiSVW6hiFU0jiRtpaZmF5HQVd0+fMUWTRFIrH7JEZLE4Sq\nk7MtQtehcXTAG6+9ShR6TM/P8e3v/B6uH2KYNoqiESUxQaqwtr7F6k6b1sBFt0ooSHyWWKBoEvs1\nVF3KyoR00UtFQipSbNskjmSutCx8yUkRFwrJQ9LB486ZrJgrSsYil8EaSZKQpPLrMAxkpriqEWdE\nMC2TqcVJfKytT5XM1jSViWojLfRoQw+fszCO5KhdlZGYXyBYpilhkh7HzI4Mhh5eVP16vG0sRni4\nLvHtVHrMa5p2rKU3TI1UZNOSNCvuiYRuCrbkIcR+mMWjqmiahUgSKjkTJUVmlScxqq5hmgad5hGF\nfA5DzYGqE4QCVTVBz5EqOl6QoCvSPS7NXOUUFHRFTlE8Z0CjfYSqBygipj4+RxgLSmMFdne2MA2N\nfM7GcYd4UUCxVCVFpdXYp1odp3lwSMG2yBdyUv+PDKbw/QEH+zvMzc/J95GmEYQhtmGiqhK3npyc\nZm1tA9vOEUUxzWaL+mQdr99jbnqSwaDPoD/KD1fJ53K0Wx1ydg7bNmi2G+i6ieN4jFdquL6D6w3I\n2xZFy8bK2Wi6wt179xBpyuVHH8FxBgwdB6c/QElT2t02Y7UazVYXL4jk4ocUkYQkok++AB999Dat\n1gEXL5+jlNe4e+tzzl66yK3PP2N6coK9rW0MVTA7P8/sqUusbG5zanaKcNgjTUNQwDIsLj1ymVu3\nb1IpVVlYmKfROERR5Xum2eqgKCqrqw84f+ESYZzQ6/X56Rs/QVUU6hM1zp1d5u7dOzxy+SJ+EHL1\nylWODg9IIh89l6NUyLO5vomdL/HMU0/x9i9+ztVrj2MV5PE9f+ESVr6Amcuzcv8BUzOTrN67S9fr\no+uC9dXb0tymVOapZ57jxRdfYhgnlKp1Ou0usReQV0LqJYWt2zcpz87hixQvUVl78IBABESRx/bG\nOorwSdwj9na3iLQSpZllJueWUAsT9Bp7bD1YY25+kp29bWbqs6yurTFWH6damyBfqMpc84rF+upH\n1CdyzMzV+Sd/8qc8/83fZfHMeU6du8DCwjK7K5t0+k1++cvXEZpKFGqMjU2DHtPuDyiNTaEYFns7\na9jFIsW4xeVHrzA1PU8+X+AnP/0ZqpoSRPB3/qP/nK/81nepT0zy4P59fvXpx9RnxiiWbVJFo1Cp\noOkqxVweRfj0W02ODvbottuMVYuUijYiCjjY2WFqcox6fRxLh3srt/nt7/z13/wCftRtvKKmAkOT\nxK5IieSIU5Xd1MO6YlBlxxcrUsKkyAuaJDBZmKaNYdoYRg7dsFEVA0010XUb07AgVUmFItneag47\nVyJJFJrNDnGUYBgWcRxDqmJoeXTdxLbymFaeNFXRcnmZW2xYyGxDnSRVSTMUV9Gks5ii6iQCOt0B\nfhCj6ia6mUczcyRCI1UyrbNukKgWYQyxYuG4gp39Fs32kEZ3yPrWPppmcdTssrN3RKc3pOf6HLa6\nDJyASKiYloJumoCGotnEIsULAhTDRNENFN1CMUzpfW0YCEVBaDp6quIl8OjVa/zP//1/yzCC5268\nyI3f+hYr9/fouSk7Bw2295vs7ffpuD4JMio1iWKJD6dS424YxvHIWwiBSEVmtqOjqNIpSjc1mWaW\nynOnZph4mMW1jgiII3hg1OUmqbxfU7Ix9HFSWyqTw4CHOeLpCIJBjqmTVBzjvbJgyklJksSoiio1\nyKqUZQkhMFWdKI6kbzryQ9U0iSunklkud1gcE8AURabXyQAXkRkRAYrUWCvaKEJWRVW1bHsCVVHR\nMxnXKKrT0DR0Q0e3DSI/QkkFBV1BpBG6lUekBlEqR8uGSDnY2yJnm2BYCFVBFRG6Cv1+n7xlULYN\nep0jgiiiVBrHDxN0S/q9x56PbVsMPBc7l0NNIaeZpFqCZWoMey0sU5rW9Ic98rkCedvi7u17VMpV\nDENBUROGQ49KdYxe+4B285CpqQkC3yUMAmzdoNNv4g4G1OuTtFttTDvHwqlFhkOPfC5Ht98ll8+R\ny5dQdYMgihgMhli2Ta/f59zyaQ73drBMA8s06Ha75PIyVzxOBflCiVanxf7hLsVikThKUBSdvGkR\nRT5J5EEakkYxqgKu52FbBoN+n/29PaYnp2g3m1QrVcbHx/FcFxQVx/WYnpklFYKJ8XFiEfHxR59S\nq9RZmDvFvZW71KsVarU6vaHLg3v30XWdifEi/rDP5uYmpp3HylVZPL1IZ/8IVevT7Q54572PKJZL\n3H+wxqOPPEZ9dpyjowMajX1QBLadpzYxSRQKDLuEXSyTiJhHlpa5cGGZO5/f5GBjh3trq6iaxvVn\nn6HdPKLfbnD98ceIvIBipcyDBw/QTJ2xapU/+IM/xA0THr36GJ1Wg8O9fSzdJAwCGodNSoUc/W6T\nc+cW2dneoX24g+O0OX/+AvlcjZnZM1i2xdZ6g2vXnsSNAzY3V1iYm6I+NfofuQAAIABJREFUVqPf\n69EahJTHpjHzZeamxtAVOLu4SM7UcJwBCxM1pmozXLzyNMXqOJPzp8npMFbS2NpeZdDzOX/+UR5s\nrSAUhWe+9DyVXJmF+dO4fsCPf/oq1595nMGgx9LyBQr5MvXpBdb3GihpjjgISayY5uEeVr7E4uIZ\nrNIEa5t7OE4fVdNBVVFtBUOonJ6fZfPeR5hWjkqpwvf/4nu0OkfMTE5TKJX4/f/4P+T26l00ReHi\nuWWS2Oe1H/0zxss1ioU8tpZKGXGSki9Y7G88oFarcnh0QBKFBI7DmYV5ROgT+R7bWxs89/yzpCQ8\n9cyXf/MLuBf6r0R+hBf4xKnAjQJURSOJR12qIot2khG6VANdN4miGBmikOK6Ad3egEHfJ/ATOj2H\nVqPL4VGDdqdH6McIIbvaJIEkUdg/aNHrDUlTlYlaHd8PcVyPSqWGruVIhEK/7zIYOIRhgufF9Lsu\nrWaXZqODSGQWt6IaKKqBHyU4fkRv4NHpObS7Q46aXdq9IY7rM/RC/DBG5nQY+EnKQavD3lGbo2aP\nw2aHw1aHTs/B8wVxopKmOt1+QKpYxEKn3XVptx2EMPADaDaH9AcDFNVEYNPrBbTaDgeNFj3Hw48E\njh/T7g1JhEKq6oQRCNQsEjElDgP+8H/5n/DjlEp9inOPPs7G9hGOnzIM4myxZKGoZmZKIrtlTdNR\nUE/wa0466BNCIsexoUKkGUtbFuuTKcQXSWkjzsEI944TqbMemZ2ILKhDfZjYlrG+QRbwJMOUYYRR\nj7Zz4namqiqmaWUueFL6pahKlrQmLUUf9tYfLTA03TjJQyebDaUnZjsPE+7gJIXtYXtf+TpWMr+B\njLCnKMdMcJGmpIqKrmiI2ENNBH4QYOULoBjEqVzYmoDT66IZOqaVJ4illWbge4RhSMm2MLSUIHDw\nPKnRTlUFlBgFldj1pQGMoqDpcmpjajpxFFPI5VDTlNAPCf0ITTVYX9ukUikzOzPHyso9JiaqRHGA\nbtukqUbe1IjCENvQGfS7GKqCoUPONOl1OgSug6lpHB0ccurUKfr9Abpu0Gk3yeWLFAqy+A76faan\npxFC0GgckbM09rY3MFSFYj5Pr9vD0HWCKEBPwR04PHLhPJvrD2g3GhTtPKVcCc91gATX6dNpNalP\n1PA8F1LB8tISYRRx7949XN+RDPg4ZnxsDA2wbAuRwtb2LqZuMzU5BWqCbZrYlsHHn3xMfWKcJImJ\nIp8L584TRiFnlpbpdpu0Gk3iOOb0mdNsbOwzXhtj2GuhpAGDfp9er4vrDHjs6mMUc0WZ+aAKhIgw\nLYvp6TlEqhBFMU8++TSGZRF4Hvdu3mbY77F0+jQ3nn8REYZUyxWK+QK5XIF8oUhtYoJPbn3O3t4B\nFy9d4IXnXiAKYz795BOuP32dxYUZhv0+y4sLpCLi8OiAdq9LvV4n9EOiMKLVavPzN37CmTOnKRbH\nKJXraJpFt9tle2eP8VoN0zTIWzoT1ZKUVRXLPPrYs1JLnS9ysLOOmgp0FVbu3GJh4RQWETc/v8W1\np19g97BLHKYYScLMVIVUjXn77Xe4+MgjvPy13+KtN9+jVqvh+j1cd4DvDnnpyy/y7i/fZWVlnYuP\nPMnzL36Nvd02j158BM1zcft99g+bVKuTXHvyeVa3t5icmiEKfdbX7nH9iadQYrBNE3c4gDShpDmS\nVOkG/OiHr5Ivl7BzNgtnlklVna2dvczYKmT5zGleeuFZ/vd/+L9x+tQCV69cYdDtY+gGSeQzVi2R\nxIKxsSqrKytM1mvkbBtV1/E9n/29fYRIyeWKPPbk9d/8Av7WW++8Mje3IDNifYdCZYwkgTgC1wnp\n9x16gwGDoUu/69Dt9un3hvQGQ7q9Pp1uj/7AxXEjHDei23fxvYgoBpHqRHFKf+jR7w0YDDxcL6TV\n6hEECUEg8P2YRqONoqp4XsjGxg6Hh218L6HTGdDtDej3PDod+dlzI8IgoT/06HSHtNp9Dlsd2j2H\nds+h7wS4QYIfpahGDkW38bIFQLc3oNHqctTqctTu0R6GDNwIPxYEiUKq2GhmgVS1CBNFRmPaBcIE\nwgRK1RqqauL6EYlQMXNFkiSh3XVptga0+y5DL0JRTLw4wfESHC/C8WJa3QGdrkNv6NHrO7S7Lr1u\nD893+OM/+sdoukG+PMELL38bJ1JJ1ByoJqg6IpGe46o+InDJwh1HyTELXDalQsqiMvOQEQ4s0pQ4\nSbL7RoCIzHAPMs2vpmnHut+HCV8jNrqSYfsj9necJWmNOu4RkCzECTt8pK+W/AQZKJIk0i0sSWXh\njqJkpKY6kXIpisShHyIoAtlkIOvus457tD+JOAm6GREolWxKcfxcOPnaGGmvkfh8kmTbyP6P0wRN\nVTFUgako+KGPlS/gh5G0FE0ThOuSJtIpTzVtoiTFMg1EErK/t8fcxBi2qTHod+j2BtQmp4lFgqKl\npGFMEkXIiBPI5/IwssglJgx9DF0lcIbk8zau6xBGHqsr64yNjVMo5PG9AaqeUqmMSajFcVCFIPBd\nJsbGSERAv9dlYmyMsbFx2s0mY5UyW5ubGIZ1PA3L2Xn6PanzLhaL3Fu5Q6VSRlVTCnmbo8MDTEWw\nt73F5EQNTVXZP9hHQcFxHCxL6sGnpibY3t4ilytg2ZaMwyzYNBr7pCKmUiyiAJ12G9dxmJioUSjJ\nLIVOr0u9NsH+3h62ZSHSlM2NbU4vnubzz29RLBfJF3M0GvtsbW2x/uA+i6cWiEKfRrNBPpejMlbl\n9dd+wuKpeVQUnOGAq1eucnBwhEhittZWuLB8GmcwxHEGfOUrNzBUk/rEFJqqUK+Pc+fOZ0xPz7K0\ndIF7K6ucWVrCcxPanTbucMBLL36ZD99/j0cuXOT6k0+i6CrV2jh/+r0/5+WXv8ovfvEm/W6fSqVE\nsVTiicefQCQJP/zh95manObpJx7nweoKi3NzeL6DbmiM18cxLbmY9R2P6fE6r7/+z7FMi6uPP8HS\n8kXanSFnTp/l/fekvWuv1ydn6RR0hcP9Xarj4wz9hFJlmt7QI0lTKrZKHIeUCzkSzyVJU5zGIZZu\n89mdNXSrgGVaNPe3eePnP+SRSxdpNBv84NXXePLx61y9+hQ//NGP2N7fpz41zVNPPs7P3/gZqoC/\n9Tf/Nt///o+YmZqmUK6xubPJ6YUFfvnhBxjVEteeepr9owM0xSLwHNIkYGysQN7OMzZRR6Qp/XYH\nU9VY/eRN7q2uYpo53n33fQrlMr1elxs3XkIzLWIhePXVH3Hh3BJOv807b/xEcisaTd568w0WTy2y\nv7NDErmUK2VcxyEMXFQEjaMDIGWyPsndlVucu3AOP/QolkpcufZXwIntrfc+fOXDjz5BNwzm5xc5\nbLRpNroM+w6uGzMcekSJHJVHEnIlShSiOCWKJYEKRUPVTFRVB1XD0E0UVUPVdHTdxLJyGIYJisRK\nNd0CdBRVJ06EJGq5HigqhmkRxYJuz8nwMlNKdzQdRbckqUrXpa1jyrG9o6pqSNtQlVRoxHGKSCCK\nBLJWqOiKntliqghFB81G0UxQdEQqi4PEVWXwhjZK+FJSNF0jjkJM28SwDKIkwvV88raZBVmoKJom\nO0olJVZ1UkUlETKnOUVDpCqxUPGCmCBW8D0HU1f5i+/9EQYpulXlSze+jusreHFKlAqSjNSVKClJ\nEhOGkdQdR8lxsfv1rhNV4rgnueAiszCV3AHZmo++l1h6HMcEQSD/POvC4zgGZPc78hcHJFHshCb2\nhUIJX9RmZ7+eRb5CHEcSZ84+5HOQ50T+/sg8JjsPnEjGJHNcO+6qj/HxEVP9oUJ/rKx4GNdXHiZc\nyvukjEwen+wPMvMZga6qWLpABCFxmlIolSRL27TJ2RaJ7+EMepTKBaJUJVVU0kTq/+MoYqxcQNNV\ndvZ3mV04jV2s4oQhqqESeQFpnMjc6SQmJcUZOni+j23q6JrCoNejVi0RxxH5go2qK3RaPcIwZGK8\nQqVcQje1DEbSGHZ6jI+PUyjkEKmc8ERRDIrBxMQkxWKR1dUHJEJw6tRpEiHT6HTDpFgqAymu6xIE\nPhMT47RbDVJkB5fTNSrFAt1OC4WUcrVCkghK5QLdTpcg9Njc3MA0TVzPpV6f5N7du4yPV+n3ujj9\nHuViURpqVEq0Do8IohAFhUKpyOzsLLtb25TLJaxsjJ/L5ajVJnA9V4YS5QwKeZu7d+8yVi5zdnmZ\nOIyIk4RWq42m67TbbRQEtmkSRRGpELSaR1iaShgM8IcOrufSbB4yv7BA7Ec0Dhu0Wy2WlhZY37rP\n6dPnuHP7Pv3BED8IOThq02g06HW6KFp6zD+4e+8evWFXas7jSF47opj5+Xksy2RtfY1yucTh4REP\nVla5euUyqqIQ+C6mZdNotpg5tYBm2PhhRD6X42Brk27riObhLhfOn8f3I04vn8O2c9xbvcfag/vc\neOkF1tcesDBTp2xBt9WgWpvCLFZoNFpEcYSup2zev0OtWmXl9m3qY1XiKCbsdbBtm6nZRXKlEoZt\n8NYbr3F6YYY4EVy5eo1mo83Nm3eYmZ1nYmaGRy8/ijcc8PZbbzI7M8fTT32JZlvawSqawLDLTM9N\nsbe1SaPT4Utf+SoHeweMVyr4fZ9iTlAp2UxNTuL6PnfvrvD66z9lZ2OTd3/5SyqGh5W3qNeneOeX\n72Ln89i2xe9+9/dIEsH0zCxCqLz3zts898wzjGaRlmni+w4pKa4zZHp6gjAMKBVz0mQoDoh8n82N\nDSbrNXzfwTKlH4jnujz97F8BL/TK/NIrtYkp3v/gI95/7wNqtVkM1cRxfWKhgSLjDuNYkKYqoAE6\nuib1xJpmoOr6cYelGQ9fYOU2hIizjlASwKIoOU6PSrNxpKZJ0xRVA001SIFur02cxOQLUnoTqxCn\nCUnml/0wC1lNIYnl4wopPpYxnNkeS8926a6VAmRSr3Q0sh1xk0WCQoqhplKnnibHmvQwknpcjTTT\nmmv0220s08IwDaIwAFLiMCKME0nYSiUre1SEoigmSVUSZBhMPmfx4x/8EVocIRSTl7/+uySpSpSk\nMspRkcRAQUgUSB3yaJw9kkGlI7w4w3+PmeLKSQcuMv35iPiVygoucWFOUrnk4ZSa5WN1QsYCzw6b\nvKlysTS6KcfnXM0McE7MVk54FIkc/afIUbiaGaRmx0Y+huzGQRLe7JyNbdtompZlvT+Mt2dSs+N9\nyJ73Q527crwPXzQGkud7pHmXD6upqjRuybB1U1URsYeSpiQiRjdtNEUjEjGJiAl9H0tTsWwToWqE\nQhBH0m60cbCPnc+hahrt3gCzWCFKddnF+z5aHOM5Q/K5HILk2BM+CkM8x0MkUCoUpS+5qmLoJuXy\nGPmcTavVxLZMVAV+dfMO584+gmnmcQZ9acySJFSq47S6PVLNxPFjWt0+qmrQbDZxHIfJqSlQNBRF\nsuRVVcPzXDzPJZe3GatUMuMiBUtV6HUaFPM2/X4Xw9CJwpgwCqiVK6RxzOHeLrZhkjMthr0BcRhR\nyOfY2FxjdrpOPpejPlaT+QJKimVKxzvX90iy+Fx36FCtVnGGDv3hAMMwWV/fZHZmmn6/T22qRqVc\nplwoMegNmJio0e10qFaqVKpVtrd3mJqsc+f2LU4tLBy/RupjY2xtrFGt5NFUg88+/ZhKtcyTTzzF\nYDCg3Wzzta++zNDpIog5e/YRfvLjn3Lp8qMkiuDa49cxDZ3Ad2i1W3iBx6VLl7DLeabLVTzfZX1t\ng6PGIb7vYVgmC2eXeP/dd9je3uHTjz5lYeEUV65cQdUUut0BE/PzNLt9Oj2H/YMWa2ubLJ05Td7U\n+OmPf8h/8O/+O2xt76AZFoVyCUHKx598zMsvv4xpGvT7XZJgyGxtjHv3ViiVKmxvbTMYdOh2W4S+\nQxo6JHHCg9VVZicncIYeU+UcnXaTSNUZq0/wD/7R/8pzz13jzOwC6xt7+L7gyrVr3L59k2bnkCev\nf5lyzuRP//iPuHT+LFP1Gd7/6FfMzC/SHvb45UfvkoiUatHmk7d+zDe/9hKra/cZr4zjDvu020cU\njJjd7XXee+99VlbWqY9P8PWXv86NL7/EhXPneffnf8Hh0QEXL17i5Zdv8P5HH+F7IY9cvISq6jx4\nsMWNl7+OP3DZWlnjkSvL9PoDTp06hZW3KFXLmRZcZdDr0Tjcx7YMVu7eolQs8Pi1x/jwww+olsc5\nOmgwVp3g8KDBja/9FWChv3t745Ve32F2dgHbKvL2W+8TRgn1iQlpcJImqJqGbmVELFVD0y00NXOU\nyiQ/o1jOVCRfYKinxBnvKCtEIoFMbhYn8j4hYhlzqChZprKKbtoYlkHguwwdh0TEWLkCqpqNVoWU\n7GiASOLMjnL0rE5iNUVWkMlISkq236qiHUdOjoo2aSrtMhVQFCFxBNTMlxxM3TjRJ2fkL0M1CIIQ\n3wvQdENOGlJJuBqZzuj6CfasoKGoKomISVJBPlfgL7/3fyDigCCIeekbv4NuWgRCgDaS5smAFk01\nj7vmhxcv0hIUsjNBMjIoyWRKUtaXfqGTPTFmkb7iI/KamiV0BUEgNfrGSTwrivTyFpB5mcvFz2hs\nPirGowVFVoflgoqRP4Au5VrayG0dEiHH+wrS1U8WWzX7Wm4rimKSOEFTkKz40XM4Hgr8CyYRcByc\nIh4ascvdOlmYjBCAEZ6uKAqqLiCO0bUEp99DNTRpkYqCF/jyfaBoNI928QKPQnkM1TTpd9qU8gah\nN6RUHiMW4MYxZq5EoTQuQ0NCFxH4iCTBylmEoU8Q+lTKZYqlAnHo0WkfSWc3p81w2EZTIQ4jNBVM\nQ+fBgwc886VnWd/YZWn5PLfvrDI+PoZp2XR7AxRdJ05SvCBkfmER0zDZ2togERGuO2RycobpuVlc\n30dTRoY9IJIAx+ljahqVknRf21xb59zyIo7TY2t7k739PU6fOY2mG9y5fYfZ2Vk83+XcxUu0Ol2a\n7Q5BFGGbFsVCnr39HcaqVXa3tikUc/hBQBzFkgFv53AdB3foYRoW3W6HublT9Ps9CkWpRdcNk2bj\niMeeeIz9nX0qlQrDwZAg8CkUCiRxzMz0DLOzc6yv36fRaDIYDqiMVQmDiKnpGpvrDxBpTLFQotGR\n7mjzc4v0enLcXa2W2T3c47DRJAwTDN3gsNHk6We+hO94mFrK559/jGpqjJXHmV2Y47DZZGFhge6w\nz4VLFyjkcnz4wfvoukGMwoWz5zg4OKI3cHjy6Sep16dptLu4UcLG7gHXnrxOuVrDtovomkav0+bz\nzz4mjgOuP/EkbhBRKFdotNvcvnuTBw/uM7+wyNHhIRsbGyzMTNBoNEgF0rbazrF09pSUD/oOzz3z\nHNs7e3Q7Xc4tL+N5Pmk05MNPPuDyE09i5C2KYyWmJseZrs+RL45Tm5ymWi0zXqvywx/+OU89+yJ3\n7q/xO7/7HR5//Enurq6yeu8+m5sPuLC8yKB5wNMvvMzq5g6Xz1/E8wOGkcB1PHbX1yEJae1v0W61\nmD21zPLFy5y9cI6Dw31W796hNj6GGjSp1SZYW1vjzp07NJptegOPhbkFvvmNb4Fu0Op5PPf007z/\n1tvMLU5zb3UNyzZx/D5Xr1xhfLyOYWjUKgWOjg5pt9vEYUQUh+zv7ZMkkSRMTk9z69bnPHblKlef\neuo3v4B/utp4JVZUAhRELsfyhQsszE6TRh53bn3MrZuf4Xo96vVx8nlpH5jEgjSNpOsUKSgCLZVd\n7giXPCERZclTqfSploESAg0VTZEBGSPPcyEEKAZJBImQjHVFNTFNyWrXghin08MfOpQKJTTUrFCB\n0BWEKt3HE2nNRphEJEpKhECoCkGaEpISCkgy2VeSRaKO8FpN0bN9VdAUCzQpPRJpSpBEoKmSWU1K\noiTSp93QMfM5wjhk4AxxPR8tZ6GbBooKYRxL9jkqiQp67GEYMYFiEiQGd9/6Ia3BgCBJefT6dcbq\nU7hBJItPqpHEBgoWiZBYdpyI4w56NPZPUbLFifZQwQYYddMPjZwfIpIBJKpAMbTs+Mnna9gWmmkg\nOWaya3c9Hz+Ksm2S5YqPYAe5b5JB/lCBhWycTybVklCAQCakqVlKmKIo6JnGO4yCDMLQjvFx2e0r\naKRZLOjJduU4Xi4aH+60j28pUpee7UuKfB3GiSCMYhTNJMmOk6GpiDTEUBNE5KKqMsUujEJM2yLy\nfTRdoz8coFsWaZx5G+QLpIpGztIo53RW79ykUiyCorG+tc3ymfNEYYIIPFJ/SBRHQEKxYOO6AxRg\n4PQRaULBEIjQRfhDbNVnrFRAEQndZosw9KhUK2iWxe3b9zg8auG4Ds89+wxenOJ4PqVyhbyVY+3B\nKjlDZdA5Io09JsaL3Ln5KefOn+Oo1eL02fOY+QKp1yHyHExdcLi7SdEy8YcDvF6PYDhkvDyGbio0\n2g0evXqFi488wnvvfcDa2jrlUomjoyPOLJ+l0+0zM7+AFwSgaRzs7ZMr2HQ7LXI5G3cw5MH6BrOz\nM5iWTbvdYbxaw7YLBH5AtTrG4VGTB+sbzM2f4qhxyNhYDd/1mahP8PrPXidwPc6fP4fjO/QHPRIR\nUcjLnO1+q81kfYxqZZz5U3N0hwNcP2Zz/R4TtQlavR6DYYd8MY+dL6MbJRYXTrF/sM7u/gZ37t1n\n6AuSKOTs8hKFQok7d1Zo79zn9sfv8sSViywszGEbFXJmmcWzF9g+2MPxfEgSmodH/NZXv0Gz1eEn\nP/8l7qDDpUuX2djc4Zvf/g4XLl/hT//8B5y5+CjXn36ONAERueiqoFTO8dbbb1Meq/HX/82/yY/f\nfIf5M8vMzS8xdFxUTeHFF75CtxeA0HjmiScJRIInVIrjdebnZ/C6TZwgoHnUpNVoo5kFXv3pW0xM\nT7N0dolKbQzLTDlsHVCZmuL+/XW+/tXfIQ1ifvbBB+y1e0zOj1OfGicJBJais7+/R6/b4crly6zc\ne8D27gHnr1zmscev4Lg9isUclcklzj/xAttrm7iDLrXZaQzd5Ps/+GecXl5gYWqSiakZdo8cli9e\nZHtvnTSNOXNmmpu3f8Xf/x//O85dvEDgxsxOLeAFKbmxOv/V3/uv+eDDj+g5Hgf9Nge7myzOz/Dh\nh59wevE0qYjxfYdm84iCVSKOAsLQZ2x8glp9mvJYjVyxwpmlZVRF5dKlRwjDkIuXLnHz1k2+9tvf\n+s0v4B/f33lFdooRJAlJLBgGMb7QmVs6z8zcPIPBgFuffUKnsU+tmCdnKpDIcWmUQKqaRECUCDRV\nXlQVQMmsNGNkF6UKMBQt88ZWpBJIyEKUZpaOWQqxHCuSSr13NlcVaUq+WEQ3DJrNhpQYGTooyNFn\nkmQLBEm40tTMTCQ58ZsmTVHFcVWQ96UpliFtN/M5G00Z5ThLzbAKxyY3o39pmqIL9bjbRKTomoGu\nGRiahuP5RGGEmhGqRJLlT6eKTGITCalaxMyp3Hz1e3iehycE1554jtOLZyQnQNeJRSyJTakKSvKF\n7vLXHege/tm/qCMdFe0vOO9lxyRJYkzDkB71mkoSyYxoXdGIMqKcruvHmesPM8RHjzfq4B/udo8X\nchlWrogUdAMllRIvkYhMhSZIkwQtTVE0UPVsvJMkx3nUURJhpAopsSTsoZAIORUiY9seT1KyQ2IY\nBl4YyOPHQ5atwHGkaSYLkyP0ECMFXA8RRphpjHBDYpFiVUtEQmCoOs2jFvlCntjpY+lCLgpVCxHH\nKFGE0+9RyJWI44Th0GW8VsP3XIRI6PUdivkciYiwrByaesIed4Y9hO9hGypaGqAQ47k+vu8xNlam\nNj2DSKBcKOM5QxbPLOD7gZRStVuEnouWKnS6HXL5HNWxcUQcky9WWZybo7m7Tew7kMZMTVYpWip7\nWzsUS3ny+Ty9VpfQ91HShFwxz+7+LqqucHSwRyFfoFgqomVMeUUBP/QxTAPPczFti9APJaSlqiwu\nzHPUaFKfnkaksLO5hqJqbO3s4LkeuVyeo8YhYRBSKVdwHA/H9ZidncEq5tnvtHiwvUmv10VLU56+\nfI1PPv8Vp+bm0RWVDz74gC89+xzNVpskFhQLBYIwZuC5VKpj7G7vcvnSBfZ29xgfH6Pd6pLLWbQa\nPbBKqIU8R602F88/ytrKbbqNJo9cXMQqz9D3BZ4/ZHFulh+9+gMuPnKBpQvn6TguGnlW11foDbv0\nWg16A4e9Ro/p+WWefvoGu3tNdo8O6bUbnFs8zd7eNgNviAhjOt0+f+2v/esc7DY5PNjl9Ol5ROpT\nLNl8/PGH/O3f//fR7QKtXpfp6RmuPXqF2/cfsPzEk1y68jin6tM8WNngVx//AjUNGTghj117jEGn\ny8qde1QnqywvnWfYGXD71qcc7e3xWy/foFK0efeXP+f9t35BY3efialp6nOzaELnjbdeZ2n5Miop\n55fP8fbb77G2ucnZc2fpHOxx/+6nTFWLTM2UAIVKuUZrEBAnNhNFnV/dXKXbbDAzUeaTD37O0e4W\n6/dlQpyqmEyduURhfIba5Dir924xNZ5nfrpKZ28TPIeD/R1qlTECV3q1T0/Os7a5wdXHr+MmCvZY\nlYn6HN1mh7nZaRDguB2GTof6xDhnFpc4OmoyWZ8iX67ihTFhHIOqUq2OkaQCRTOYmJ7lw08/Y3J2\nnkKpwlPX/wqw0D9fP3xFyUajpEomC5Kdiu86oMLM5DSnFk4RBRF3761QLpSo1GokpMRJLH2XVQUN\nIEkwdeOYsaykyGhFDVINgiRER5FyrqxYJxlZK1VGxZssXerETESkKYpICcMQRZFBJH4Q4HseSSrQ\nR3h35sQ2ummahqaoxCJB1TVIJdappEg8Tj15/HjUWSOIRUKqcJxiBsoXxrUgu7iUNCv46THpS9N1\ncsU8iogZDvrkCrljfFM3NJIkQFVVvEglJeHe26/R6XcZBiGXH3+ehcUl+l6IokljFi1VT1zffq0w\n/3pX/fD3v245+uuF/mScfpLudawlz8bUYRwfj9eTkYmNciIrG91aQwaDAAAgAElEQVRGHfevLw5O\nMOeMXIYMoYjjCFXVjtnkumETxglCVyGVhEMRJuiaJD+GfoSpmTieJ3O+U0DVMQxTOsFlCwtN10GR\niwhd1wmCIONCpMfn6HgCoYyY7gpRGMlCnghMTSUJApIowTQ1eu0uYaqiF/LEoUBXNVzPpVQu0Gsd\nYtk2sWIjFANdTRFBj9DvUavPcNRqyVjDXI6h06eQt4mjgFwuf6xhP2HrJ5DE+O4Qp98i8oeoQk4J\nXC/CMG02tzcQqdT+Ly6eodXpcuv2HZZOL4Gm0ev0qVQq0mhkcpoojKjXJuh0jrBtHcPQubtyl35/\nwOLCadrNNgVTZ3t7mySKaBzuUy0XMzzdIgoDypUqlXKRMJJkO89z2dvbRhGC+VPznD27zP37q7Tb\nbXRDR8QJ+7t7RHHMwHVoNJvMz8/T63TRdQPXCyhVqlTHxhkOZNFOQWZ8F/L4cUSn32NsbAzLNOm3\nO+zt7HLh7DnOXb7Eq6+9xsVHLlGr1eh1u1kwkkqaCAzLpFavs76xQalUot1uQSool8r4fki1XAJF\npd3tcXppmYPdbYgCZqfrHB21yOVLzC5cZrw2jmmk9NotAjfg6qNX+OX77zM2MYWhmoS+R6ff4uqj\nF3j9x3/J2MQs15+9wcr6Ns+++AJbW6sc7u3QabU4tXSGoevz9PVncf2AqZlZDrYPpF4/GpLLG6zc\nX+Go1eXcxUdRVYtbn3+KoWqcO7PED179Ic/euEE+V+D2x59z5eo5rlxeZm9nF5HC3ZXb6JpgvFLi\nnQ8/QyQGQzfA1CN0JWZ2rsbrP/4LPv7wNqW8yqVLl6hNnqI98Njf3WdmZhbTtIijiL/4839OHMPc\nwiJTM/OkqkI07HD/3gOeevoZqrVp8oU8p5aXMQyb80uLbGxu841vfotPPvqAjQf3Ga/WePlr30Sz\nc4xNzrC3t8/U5BRKIrA0mK1V2Vi5y0dvvcOzz73Ed7/xPK2jBp/f/IxYhHz7u7+Hlctz+ep1mgMf\nK1/E7TaZm57G9yPOnllganKCtbV7GeyZcnb5LJ7rsL2zy+REnXKxwr279/A9l4laHSUVaMi8g3Kx\nxHAw5Jn/n17o/0oU8E/u773ysI0lkF2kyawZlSxBTGOiNsnc3AKfffIJWzsbFHI2pWIBXVVJohA/\nkAHrURhIfaumkiSQxjEiSiT5RwElkaNfQUqcSnxXIAlSI00y6sm4c8RSUjkZ+5qmSSGfR1EV3KGD\n47rHpC5JFouOL45JNtJ1PU8S7JIUI2OMJ1kXKYQ0Bkkf6tJUVUUVEs2NEcc48qj4pSkyd3vkpqWc\nMLAjIal2ds6m3e2BArlcnjBO0BWBbugkiomqJnz2sx/Q7TUJ4oTTF65x4fJVnCBGUXVUkDrr/5di\n/HBH/XDU6sPF/AvjZP6fXbph6DJBTJzI0kYENakfl5h1koovbOtfto0R6ezhAj5ajCFiOepXspzs\njNBn2zaxmqCmKYkfoOsagYiIFUGumCcIfIqWQRQH2TQkJQpkl6oqglickO+EOGHoCyG+sOBQlJM0\nu9FzTFPJUdBVlTgMMVX52isXi4SRIAKMXFHCAKkM3RmvFGg1j6iO1QiFShgrmHpK7HZwnTZoBbrd\nNmeXlwhD2dXGoS89scfr+KGPiiZH/3HEsN+hXh8j8AbEgYupwVi5TG8wxDBsFNVA1RUKWRRoSsLt\nu3dIhUJ9oo4ApibrGJqRKQcSysUytmlTKuTY3tnmsNVEUXWK+SLFfAERhpiGdKVLk4hep0UhZ2MZ\nOu5wSBAG2AUbkQhM06TX6yIXQ4LpyUk63Q66rlEul+l22ty9fYdOp8PM9Azb+3t0ewO6vT6WZeMO\nBxSLFcxcjo3tbRwnYGpmhmqlSrvVQTc0DEPDGfp0O13coUveznP96ev0ez3ur6/heC5j4+Mc7O+j\nqiq9Xg9V1ZmdmcEZOghSNMOg0+lw7tw53vjZz1g+s0w+X0BRFFqNJpqqk8sX2Tvco1YtU7QNNFVh\nc/eQYZBy+tJT1OsT1Mby9JoHBI5Pr9/jwuUr5MtlDN2iVCwwNTXB0d4m29v7fOu3/zXOXXiMdn+I\naZt0Guvs7WwzPzNHu9OjUKly7fHHieKE2dlp7nzyK2Zn6rQ7Tarj4/yff/QnvPSVr3PxwmXiOGFr\n4z4TlRJFy+TWrVvUpydlzrum43t9SFI8N2bx7Dm6/S4Hu1sszp3CTwOWls4iUsFEweTB3Tu8+cYb\n7GzvEoYx3/3216mUSsSpRm1yFs8JmJmuY5bG6feHLJ4+y+LiMsvnLnF41GBpeYEgjPjRj17nxvPP\nYVg5QiFoDlzcvs+15TO88ebP6PgeQqR8+5vf5Ny5i/S8ACwLM1dApArr9x9QH6uiJiFrd2/zi7/8\nCc+88BWEWWWhLHkOlp3n3Xff4umnnufUqVO4oUZ+bJqtrQ3mKhaGpuNHMVaaUK0U2N/fpj4xzrDv\nkEQJkxMTVMpFPvnoQ0oFm3qtSrfdxNAULF2h3Wvj+ZJPpRsqT13/0m9+Af98/fAVeeHPyDypDLBQ\nsjdpImR3HEYCzwsAjaWlZXTl/+buTWMkyc8zv1/cEXmfdR9dVd1dXX3N9Myw5yJnKHJEUhQpUtYt\n7sLGrmx4tYJpWAYWAhbe+WZb8AK2sF4JWu8hS5RXxx5ai6K04jH30T3T0/dV1XVmVWVW3mfcEf4Q\nmVXVQ9KGsTBgbjQS1V0VlRmRkR3v/33e54CH9++zV9pBFImiOXUF23Vwg0h24/pBZI05DAANgojU\nPYqa9MJRMIh0RF4aQuWiEEHeI4MQQRAir+hjBdd1ozlxPB5HliRs06I36BOGYZRENQy08IfWmYqi\nRvN2QcAZwtuSEOUdhyM5lO9DEBB6IaEXRMc4Ym6PpFeHxSpE8KM0NVmSUBUFSQQ/9PGCAFGOnldT\n9SgRyXbQNA1lWNSCQEQSAm6//W3MfgvXDSlOzvHE00/TNSNDHXG4iPGGhicf77yPF9SPa6ZHRfbj\nnffo50fa76gwu64TLXi8I4WAJMlHH5Zjc/NRV378uY7HwDqO8xhhbuSMJohi5BceMnRhG2q3RQHX\nsdE8HzwfVZEjGFwcGsUMpWyW5UbzZlGJZI1+dH1s10UUolFQlBwaHjLaJUk6RiiUDxdro0WeJMmE\nQoDruCiKiGMPkAgIQg8jpiAg4AB6PIHnuriugyCE6KKI59vE4klkLY7v+5iDHna/g2c5dE0TXdNJ\nJ+OMfPDbnS6Fwhi9gYmqaTi2jSAKhJ5DNp2kVtknaWh4zgDBc3DtAZKsIKsqiWQSVTawXZtEIkFv\n0OPu7TvMzc6Rz+ZIZ1OIQki71ULXNExrgG1ZxGMGjYM62XyR7f19MvkC7XYbWRBIJgxURcK0Te7d\nvcPszBTBMLa3UMix9mgNxChTXRQlBrZNvVYjm0qSiMepN5sEQUCn02FiYpxYPMb21jYJI0YoSrRa\nbfrdHolEHM912a+UmZqawnUsyuUyvXYbEMgXCsRjBhBid/ukU0m67RaOZZLLZrA9l/lTS3x45SqG\nbiAhUK5U0PQYIZDNZem02yiaTq1exxz0UTUVRVaYmp4mmUhy/fpHFMbGqJTL2I5NEPrMzkxysFti\nc7vE8tlLPPHccxDPkcmmicsCGw8e0Ou0OLl8Cj2ZotnpMVaYhCCk1+mwufGQSxeeYiw/SSqVw/N9\n/uD3/zmvvPgM/V6PZqPJ5u4eiVSGdqtLt9dFVRQ00cb1bWamZ7h27RYfXLnOL/3CL7G3u0Uhn8bs\nNIipIu16Fc+1cQOPbrdLvdpAROSb3/wWTz37LGvbG6RSCTKJNHIg0ndcDD2B2TUpbzzAdwaMF/Ok\nsxmeefopUrEY3/3Od8gWCrz59ttceuIyybhEZb+GBFw4d5ad3V3mFhaptXssnLnI2ScuoAohvtPh\nL//qW0zPnWR1YxvRDZlJSdxavY+gxnjmuWfpWTa2H2B6Pp4gMDMxhSpJ4Pvoioo16HP1yrs8c/ky\nCxefwRhfYOODv6a0W6FvOTxafUgslkHWNNxQZu7EIu1Gmfb+IyRBpNFqoIQunU6DRqNGPBaj3+uR\nTqW4euV9Tp+ax/cstjbX6PdazM5MUCmXKOSz2N0OjeoBjYMqoefyyc/8R8BC/+D+9qtRkQuGDl0e\nwTCoJAhH2cviYdZyEAT0+n3SqQwnlhZRdZ2d0g7b21sEgUchl0eVFRzbipjbhoFLiBOGUVZsIOIJ\nAeGQVIQQzSIlgegmNyriQyc4STiaXRMexTKOCoiAgOt5yLJEPJ4gpht4jkun00VRo1hJaUii8ofM\naZGomPuBjxd4eEGIIMhDNvIQFhclRCR8BEJBHFqdHSdBRX7WQeCjyvJhVrgoikhy1DkPbecgCNFV\nFVkQsPo9At/DBxRJRSbg9pW3aFR3cUyPqclZnv3Ui3QsG01WIQhxwyP5lh8Ej7PCR0cUHsHixxGV\nEcFrJOUCDostjBZCzjDdLbogURGOrrcgRAhMQPjY7xw9//dD9/B4hz762ai799yIgY8oYFsWMgGh\nG82Ag1DCBcxQwBEF/DBEkzV8P8SyLX7z1d/gy1/9aYLQR1dlUjGdVMIgk0ygSiGnlhbYK5WIJxJY\njhUVbzhEAA55ANGZRJ26BBBi2pGxhqaIOE4PRZOQ8DEHfXqDHrFEEtt0UFQF2zLBcdjd2yWeThKG\nArGYgSqLlHf2GM9P0axXSSQMZFmm0+4hawad7gBBVpHlKOpWEAU0WUHXVTRFoN9roysKou8Teib9\nTgvX94ZGNSGSppHLFpAUDVHWsC0LVQlRtRBJlTE0jYO9CjNzcyiKimkOiMdi+I5DMpNhY3sbQVLQ\nNR3H8SiMT2D12/TNAf1+j1g8Rq/bJZNNY9k2e+V9VE3D0A36ljlMLGsNzTl8isUia+uPyGbTeJ6P\nKknkc1nu3btHJpthaWGBWrXK/t4eL7xwGV1VaNRr5FIJUqk4vW6PjfX1qNgqCs1Wg3giTiqdQghD\nsrkc9eEYQpIEFmdPEPpRoIrvBezslkhlM+xs75DN55iYmCCXyeIHPlevXOXll1+m2+1G6NEQPYkZ\nMSYmJtjc2URTFFRJpNbuEYulGBufYK9Sp5hNsbOxSm2vwsTUJPFsntnFk+ztlZmYHOetN18jDF1O\nn1smDERs00ZTNQ4Odum0quxtPqLVbvNg9RHxRBJRUchkUkxOjPPgwV00yaXdaiFKIn/6x/+KlZUV\nXnrheWrlPVr1A9IJnfLuNma3yVNPXyKbzZHNFVhZOcvY/CwXLz7B3u4GrfYBZ8+eIR5PMDU7h6zL\nxOJxZFnmj7/xDSZnpvjsF36Cp555joVTK2w+uk+n1+czX/wpBoGI2bfpD7qIUpbZ+Tl0I8qkqNYr\nEIQQiOyXdjm5tEClsk1/MCCbzXH27Dkmxsb4/f/9t5GQ+PSnf5w/+/O/IpRkZE3FHJhsrK0jBB6+\n5xCLxdje3mZrZwdJVXnm+edRjCTVlsPN7/4fZLMF3nrrTV555TO8/sZ7nDp/jpnpaexBn0xCJqaK\n1Kr7JDSJMPBoNuucPnWSZqPBifl54rEYk5MTqJJAPptFCAMy2QytZgPCAN9zGZgOQRBFHg9M+z8O\nEtuVu9uvRgze4BAWFoIwIhmJIqIgIwoioT/s7gQBJAHT93H8gHgiwcTUJGOFMWqVGg9u32WiOEE6\nnoQwpNXr4IqAGLGOJUEilI50uQBh4EWhH8PZnqqquG40hxWF6GYbjuRbxxjUR93dkFDnuoSBgK4Z\nxGI6nV6Xbrcb6bo1jTAERZbxPAfPsen3W4iajO35BIS4votHlJoV+V0LuMfCJghHsrRI7oQfDA1K\nohn6yDccQBVDRKI4S1kARQhQJYGYKhOGUSdj9S1Cz6G8dZ/SxgMCX2ByYopPvPwyHcdFlnQIBCzf\nja6D+Pj5w9HsORjC/5FyLMQPOOQyHEm+xajbY8QMD/ADf2j2wnCnaGdhGCYyMoQ5DpFHNukRKzwq\n+Bx+HcHRo78fSseGASPi0EhHlGRCAhRZxBkMyCYTVMslYrkseipGIptAliCjGyQUmYyhYg96fO9P\nf4/nX3qRnc11Krtb7G6ssXb3Ntfee4d33nuf73z725T2d3niySexbBtJHIbTBCCKErZtDUmFUfdt\nWoPDBDJFUTC7XbKZFI7ZQ1EVVFFAVeVo5h0z6DY76MkYtmMjex6bpQ1Wzq3QbDQRETAHParlGotz\np3i0cYdsNosoq8STKYxYAlU3iCdTrD96FPl7OxaN+kGU7y1CNpvGNgdY/R6GJuF6kUTRcaOboCCL\n6EYML5Dp9zyymQTXb7yHKJhk8+Ps7e4xPjFNIpXD9kNkVWdt9QGKEjI1PcPq2iOmp2YRBYnN7RKn\nz1zEs5s0m02qtSqKLKPKMqqm0xv0GFgWi4uLZHI5bNuOXOBiOjFVp7SzgxcEaIqC5Vh4nk8iFicM\nQ/LZHN1Oh2rlgPnZOTKpFPvlvSjO1w+xB22SyRRjY2PYtksqnaXWrNNqt/Ck6P/izMwM5mBAq9ki\nnUzQbbRoNds4tkuz2abb66EZOosnl2i127TabXwvkqvGjTiCKNLtdslms7Q7HeKxGCCw8egRcyfm\nsB2HbrdHLlug3moRMxLIQYDohsQViV6nTvWgyhNPPcvqxiYIMhPFIpbV4eHqbYqFDFMLC7Q6PYrj\nedY310inDBYW5tEMjcUTC3x49QN0wyCRSnL65ElEMWTuxAx3r9+mOFYkmYhz49aHnFleotNo0Gt3\n2FrfoN2p8tUvf5GBOaDX7yHJGj4KSjzGTrODJCp89M4bvPDcczQbPerNHnoqSbVWotttclCt0HdC\nFs+c5drtB+TG56g3B6ST4Ieg55c4ef4ZOo0DvvBTP4sVJNjZ3ycg5NyFZVRZoFUto7kuqVgUWNPo\ndalW69z88D2eeuZJGn2LJ597mhvvfMDc3BIzJ5bY3S9Tq+wjh1Dfr2BZPe7fvcf6+jpTMzNkC0Uu\nPn2JtY1NRNPGN20eXPkWjfoB9WYVxJBqq8tnP/85PveZz7J69yYxVWBzc4PxsTESukgslkQSBPrd\nLrXqAWdXVqK8d13jww+vMT9/gmq1hmu7ZJI5bMfj9KkzbO4fEMvkSORyxDM5nnvu2R/9An59rfLq\nKOFrtIlE+c6hd5TNHD2ijsUPgyjQIgzxAh/X9hBFhanJScbGx7l9+x71RhPNkBnL55EFCDwHEQE/\n9CAUDuVfUczmCDr3kGRxeJOXIIyOIzIiOQZlh6PiFEmnRt7twjDuMkISAnTDQNNUTNum3e0QepHm\nWRF8NDng4oVTGKqGEAqoSmTGYsQU4ol4BNuKIIsiiiQihiFicOz98KPi5AmRTMz2fLwgMrxxXH8o\nqRJw/Siu0/ejYA9JltFjSXxACAV8z2Zr/QE7G/dRJQ1J1Hny5ZfpDANj8MEXgkh3Lxx1uD8MGj/a\nhMf25VgHfTy4BEazc/GxohuGI3MWHlswjbTej2mqw8c92I9e8+i4jssLBUHADfwoRU6M3KsIAsqV\nMjtba2w/uM/dK1fZuHadG+++xXvf+w7f/LM/pVsvowoCV+894saDNTrdAbdv36PTHZAvTJHI5Fhc\nOs2ZlbOomoHrDaVswRE3IUIVIvqkIEaLVd/10A2DMAiRBYFOs4FnDSKWdd8cmgQ5yLJMr9NFMXR0\nQ6dXreLiURgfo9/uoUoig0EXCBgrjFOv7xJPpikUx+kOTDwvQBim6G1ubFLIZeh32qiKxNjYGKY5\niCJaPZdmvc7YWJ7QD9CMOJVKjSCETD6PZTs47tAXnpBabZ9CPk1pt8H0zAK5sWk6pksgaUiqQRCE\nlPY2SKeyBF7A5PgkjVadTqfL8ukzdBtlBmafUmmXpcUlAs8jkYjz9lvvMHfiBIYRw3VdCoUCt2/f\nQggF5mZmsHoWnu8zPTVFt9NFRKDVatFqNun1e5xZXsaxbRzLjUhqtsn21iYnl5YIQ4Fms42saCDI\nJDNpstkUfuBi2japRBpZlHBsl0azTb9vMjk+gWk5jI+PY9s2yVSS3mDAvQf3WV4+hSwK7O3tcufO\nXRzHIZfN0+60qTfr7O7tkstkCIKAfDZLtV5jfmGRR+ubxLQEuWIOGYmxYoGHa6tUKiXa7Qq5dJLu\nwGRydiayf02l+Ku//BbTUxOkEik6zQ7rj9aQFJlOu0W71WBjfY3Lly8jhHDj2keEIRzUq7z0yRdZ\nPnOaWrWK70Tvp6YrbKw/oljIk0okWVpaQNN1trYeERLywic/STKVo9kxSWaKVDt92n2buBanmMmi\niDrj4/OcXFrm4YO71PZqvPnad+g3W3zlF77G/PIpTp05Sblc5ubNhxhCm7UHDyl3BQJRYSqrs7ld\nZX4yz9z0GKsP7qBoCpvbu5xcPoflBnQ7dVYfbbB0+hSff+UV7t68znfefI0vfuUXSGdz/NX/+S0+\n/crnGJ9bpDg2zqDTZn56khML8xSKRcbGily48AQnTiwwsCz8IEBWVabyBcxOA7dbwjIHCGLIo41N\njESWhZOncEyLfDbDoNvGCwLarRbFYh7TtOn3+0xNTXNy6ST75T1836VWq5LLFmk2W1QPapxZXsH3\nffbKFc6snGWvtE8+k8Hsm8iizOXn/sNY6PL/8y7/32+Oaz8GdQauR4iAIklookIQBOi6Ht28RQFf\ngK45QBgGU4SIhAI4oY9jWgQhzJ1dIabKSKHH/u4WtcpBtHrPjzMxMYWkK1h2f0iQkqN5uQAg4Vku\nYeggijKqquIPIV6IVMDHi5AoilEX6Q3DM4KjEA0E8F0fEEjoaVTNR1YUAs/GdSwunDvFP/mdf4go\nxNEVHUXRopFBGOmgQ89FFEUe3d9GS8XxEAgEEVmUSMTiFHI5JhZOMjk/C5KI6/o4joPn+YR+gCeJ\nh6ZhQihCIELoI3o+2G1ABkVBQmN8bp5CJo3kqbQti25vgJHM02sOkEMJJaHhDyxQIkOY48zl46jE\nUQF9XDIVFd7gMeh79DziMDp1tP/xhUEYjnzKj0Py3hCWf5xUN/q949fneCDKaJ+IMT78fhCFhqix\nBGIQcHp5JSJMBSqBr1CpVDio7nPp0gVMz8H14De//sv85n//P1FqdXjjrXf56Z/5ZXQULNdFkuXI\nZFEEywVBVA+NbGzHRdXkyAgmANcTwHeQQtBVnV61QT6Xwg48PAQkUcMQDWJpGbvfJROLRTeIXJF6\nrUqxmGevtI1oGLgDj3Q6TaNeQRMFAruPJHvMzM3hui6qFBKGPr6gYqgKQb+J7JuUS1vML5xAjyUi\n2Quw+uAhc7OTpDM5+laIki0S9m1WLlyi1mlRLlWpt1tYns+ZsyvENJ2x7DRvv3aFH/uJn6RebxIv\nLjAQNQQkzIGLoicYmzvHTqnC9Q+ukM3Eefv17/Hpl1/G6tWJx1LIksZHH9xAkXROP7HCn/zJH6HH\n46TTaYx4DLM/YH39EZlMhmIuT+WgxtKZ09y48SGyLJPP5eh0OpGFbDaLJElcv34dTTOYmpqhXKnQ\n75ssLC3T6Jg0Oj12t/fwH22Tz2RZWlrig4+uEE/GGC8WsPoO5VaNqakZkpketUYVKZUhBWzulQDQ\nRPBNm1defIn7Dx+wvVviJ774RTY3N5FFmV6vQzwep9Pr4DgOfcvEty2q1SqypFHZq3D+7AU+unGd\nixdWAJFmr4GoB5x74hRbG/dxXJM7tx7wlPwJ7ty8T2NylonsOEk1jorI2sYGguuzv7FNuVwml8sx\nNTPJX/75n5PUDCanJtjY3kYm5Lvf+WuWlpaYm5tFUyUMw+D3/sUfcPnyZfK5PBsbG8TiKvfu3ebl\nV77A1fc/YHXjT1lYPI1ixAl6JlPTM0xLMgelEvvb92i1WmiaQTppMBjUmcin+NLnX+L08kU8OUWt\nP6De6JBKj/H5L11gwt3l7gcfcv70CeIpg9mCzHvXbvFRcwNJ1onHk3ieQjY3R7vr0w8FZEXlJ7/y\nZa5cucJfb73NV37xP8Xsmfy9v/N3+MpXf4GVpy/x3s2bfDo3Q3m3zMLJU7RbNQxBotGok89m2Xy0\nRrvdZm9/n1gijmqo3C/vs7dX4YVnnuHm9TtsbW0jEPLR9du8/EoHaVFkbW0N33HJF7J4rsX7V6/y\nyedfotPp0Gq12N3tMj0zTrfbRVEi74pMIo6RMLi/ep9MIklMU+k7FpImMjC7BJ6J2av/B9fO/190\n4Ffv77wKR12UpqjIioIkRfBdKERuV47n4AY+iOAF3iFsevi7wRGcKysyjuPiB5BK5CiOTWPEU3S7\nXbZKO3Q7LcYmiiiyhGU5kR/38PUlWR4alYS4njeEcaNMakmWDr29ERhCwKOZ8OEI95C1PioysiAd\nysJURcEzLSyzz3PPfQJDj2EOzMjz3QmQRIWEkSKhp0jFMzx5+TJnL15kbmGRpVOnmJiaRNM12p0O\n9x/eZntng4ODKP83HlNJxnUShgqCghCEuK59lJ4VBAhCAKKKHxAZr4Q+pY173H//ewRu5AsfL+SJ\nZ3PkUzl810NQpMhN7GMd98eL6OjryM70cWZ4eOznjzPGjweQPP54vOAfvZZ4KCU7/trHN8Mwhs99\npBUPguCQ6DaS7xGCGEZWNH4QULccuqZLvedEmk7X4d2rV5mYmiEIRf7iD3+Xn/+bv8JffPt7XLz0\nNNl0BtO00HQNX4hsbxlOAjgUJYYIonQ4/kAQkUQ5kov5Ho5l4jkWrdoBk5NFfN+l066STBhcv/YB\nmiZi6FpE0PRD4skE9VoVKfDp9/tMTE1hmiaKKFDZ20OVJZKJOPGYwW6phKZpGIkUjuuiKRKNyh6i\nIJJIJjGMOAEC/X6XdCpJo1Yhlc5gWRbrj9ZRVJVB30TWNNKFIuagj+NGBEHP8xl0B1w4e54b12+z\nXipRLI6xsHSanukQ+lFUaxi49HstPLNPu1FFVhTefOsNvvD5L7C7vUO33SSVTlA9qHBifp719XU2\n1tb48pe+iDkY0G632d3dZXt7m+XlZXZKJdLZFIoks7e7GxMLWkQAACAASURBVGnAFYWYEaNycICq\nqiQSCeLxFEEQsLG5xdTUFMlUihs3btHp9lB1g0QyCSE4jsteeZ9z51YIw4B0Ks3q/VXGx6YYGxtj\nv1KmM+jTHQxotRrkCnky6TTJRALPdqKxm6bRH/R48tJTbG9vMzM7i23b9Pp9jJiBbdu4jks+nyWX\njcJAsrkcnh+hfqsP1wgQCAIXWY2zWyrR7bSYKI7T6Q/Y2tomly+SyWRJphO0Om1M1+TR+hpBKJDN\n5FhaWmJ8vMj6xjq6ZmD2uqycOcvG5ga9gUVMU0kmEly/9hH5QpFkMsWVK1d45bOfIx7TaTRr6JrM\n1tYWUzPz2K7MK1/6CrKuc/fuTZ48d4ZurYpvWbz12l/T6dbp9Fo0umXkmMQf/qt/zfLZ05x94ik2\ndirkxxYY+AFGPIahqyhSDMNt8pff+ibnn32Z0u4uqt9jde0h559+mkQmRyqdJ5UpIIkKkiRQyCdx\n3Sic5/nnn2PxxAKra6uM5Qtc/+gaH773Ls+//Cwb25ucPnMa17PwvD6EEdLRswZsbu4wOT5FuVIh\nmU6gGRpzs7O4ponVN8GqMjkxxfrmI3b397EDiUQyyYn5E+yWSggEdHptMpkMhqETBvCpT30KVVX5\n4IOrtDtN4vE4giCiyBLJRJJWp4Pv+yiSRK3eYHZhgfJeiXariT0YYPa6fOYLP/mjD6EfL+ABUQFl\nOGu1fJdAADcM8DwPj6hgeoE/dFiLSGQj/fZofuoFHpKiIggalgOW66PpcdK5HIXxIma/w25pGwTI\n5vLRvHaoMXaHhVqSlMi1KwiR5OjvovB4QQh/SNE++gMhIo5pIamRNty2bHRFwbZtJqemOHdmhpnZ\nScbGigiKgBLXyU6MkRkvkJ8aQ0tlcIKQUJIw4nH0WIzxqSlOLC5y4fwKItButnh47x43r19n49Ea\nlUoZBAnDUMmkUhCEQ2tZh5AAJxAi5MH3UcWQ2x+8jTSoMuj2CAKfnudyUGugaTHSqTSBKCIIUhQE\ncpyI9TGS2NH2/bKxwzfo2PeOIO0jD/TDZxCExyD7x6HxH643hyOFwA9yRQuHA/LRtQuH6WKRi1+A\nIHkQ+CRjOo7dJZNQmB7Pcv39N5nMJ3n3299k9vRF9FSWick5et0eqirjRV5qUeGWYJQmjjD0uA8j\n2VkQBsPzjcY2iixFCgJZxOx
Download .txt
gitextract_ye5co4e2/

├── README.md
├── checkpoints/
│   └── 000.txt
├── code/
│   ├── LICENSE
│   ├── ThirdPartyNotices.txt
│   ├── cocoapi/
│   │   ├── .github/
│   │   │   └── workflows/
│   │   │       ├── build.yml
│   │   │       └── deploy.yml
│   │   ├── .gitignore
│   │   ├── .isort.cfg
│   │   ├── .pre-commit-config.yaml
│   │   ├── MANIFEST.in
│   │   ├── README.md
│   │   ├── license.txt
│   │   ├── lvis/
│   │   │   ├── lvis/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── colormap.py
│   │   │   │   ├── eval.py
│   │   │   │   ├── lvis.py
│   │   │   │   ├── results.py
│   │   │   │   └── vis.py
│   │   │   ├── requirements.txt
│   │   │   └── setup.py
│   │   └── pycocotools/
│   │       ├── MANIFEST.in
│   │       ├── Makefile
│   │       ├── common/
│   │       │   ├── gason.cpp
│   │       │   ├── gason.h
│   │       │   ├── maskApi.c
│   │       │   └── maskApi.h
│   │       ├── pycocoDemo.ipynb
│   │       ├── pycocoEvalDemo.ipynb
│   │       ├── pycocotools/
│   │       │   ├── __init__.py
│   │       │   ├── _mask.pyx
│   │       │   ├── coco.py
│   │       │   ├── cocoeval.py
│   │       │   └── mask.py
│   │       └── setup.py
│   ├── configs/
│   │   ├── _base_/
│   │   │   ├── datasets/
│   │   │   │   ├── cityscapes_detection.py
│   │   │   │   ├── cityscapes_instance.py
│   │   │   │   ├── coco_detection.py
│   │   │   │   ├── coco_instance.py
│   │   │   │   ├── coco_instance_semantic.py
│   │   │   │   ├── coco_lsvr.py
│   │   │   │   ├── coco_pose.py
│   │   │   │   ├── deepfashion.py
│   │   │   │   ├── lvis_instance.py
│   │   │   │   ├── voc0712.py
│   │   │   │   └── wider_face.py
│   │   │   ├── default_runtime.py
│   │   │   ├── models/
│   │   │   │   ├── cascade_mask_rcnn_r50_fpn.py
│   │   │   │   ├── cascade_rcnn_r50_fpn.py
│   │   │   │   ├── fast_rcnn_r50_fpn.py
│   │   │   │   ├── faster_rcnn_r50_caffe_c4.py
│   │   │   │   ├── faster_rcnn_r50_fpn.py
│   │   │   │   ├── mask_rcnn_r50_caffe_c4.py
│   │   │   │   ├── mask_rcnn_r50_fpn.py
│   │   │   │   ├── retinanet_r50_fpn.py
│   │   │   │   ├── rpn_r50_caffe_c4.py
│   │   │   │   ├── rpn_r50_fpn.py
│   │   │   │   └── ssd300.py
│   │   │   └── schedules/
│   │   │       ├── schedule_1x.py
│   │   │       ├── schedule_20e.py
│   │   │       └── schedule_2x.py
│   │   └── lsnet/
│   │       ├── lsnet_bbox_cpv_res2_101_fpn_dconv_c3-c5_mstrain_2x_coco.py
│   │       ├── lsnet_bbox_cpv_x101_fpn_dconv_c3-c5_mstrain_2x_coco.py
│   │       ├── lsnet_bbox_r50_fpn_1x_coco.py
│   │       ├── lsnet_bbox_r50_fpn_mstrain_2x_coco.py
│   │       ├── lsnet_bbox_x101_fpn_dconv_c3-c5_mstrain_2x_coco.py.py
│   │       ├── lsnet_bbox_x101_fpn_mstrain_2x_coco.py
│   │       ├── lsnet_pose_bbox_r50_fpn_1x_coco.py
│   │       ├── lsnet_pose_bbox_r50_fpn_mstrain_2x_coco.py
│   │       ├── lsnet_pose_bbox_res2_101_fpn_dconv_c3-c5_mstrain_2x_coco.py
│   │       ├── lsnet_pose_bbox_x101_fpn_dconv_c3-c5_mstrain_2x_coco.py
│   │       ├── lsnet_pose_kbox_res2_101_fpn_dconv_c3-c5_mstrain_2x_coco.py
│   │       ├── lsnet_pose_kbox_x101_fpn_dconv_c3-c5_mstrain_2x_coco.py
│   │       ├── lsnet_segm_r50_fpn_1x_coco.py
│   │       ├── lsnet_segm_r50_fpn_mstrain_2x_coco.py
│   │       ├── lsnet_segm_res2_101_fpn_dconv_c3-c5_mstrain_30e_coco.py
│   │       ├── lsnet_segm_x101_fpn_dconv_c3-c5_mstrain_30e_coco.py
│   │       └── lsnet_segm_x101_fpn_mstrain_30e_coco.py
│   ├── docker/
│   │   └── Dockerfile
│   ├── docs/
│   │   ├── Makefile
│   │   ├── api.rst
│   │   ├── changelog.md
│   │   ├── compatibility.md
│   │   ├── conf.py
│   │   ├── config.md
│   │   ├── getting_started.md
│   │   ├── index.rst
│   │   ├── install.md
│   │   ├── make.bat
│   │   ├── model_zoo.md
│   │   ├── projects.md
│   │   ├── robustness_benchmarking.md
│   │   └── tutorials/
│   │       ├── data_pipeline.md
│   │       ├── finetune.md
│   │       ├── new_dataset.md
│   │       └── new_modules.md
│   ├── mmcv/
│   │   ├── .dockerignore
│   │   ├── .github/
│   │   │   └── workflows/
│   │   │       ├── build.yml
│   │   │       └── publish-to-pypi.yml
│   │   ├── .gitignore
│   │   ├── .pre-commit-config.yaml
│   │   ├── .readthedocs.yml
│   │   ├── CONTRIBUTING.md
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── MANIFEST.in
│   │   ├── README.rst
│   │   ├── docs/
│   │   │   ├── Makefile
│   │   │   ├── api.rst
│   │   │   ├── cnn.md
│   │   │   ├── conf.py
│   │   │   ├── image.md
│   │   │   ├── index.rst
│   │   │   ├── io.md
│   │   │   ├── make.bat
│   │   │   ├── model_zoo.md
│   │   │   ├── requirements.txt
│   │   │   ├── runner.md
│   │   │   ├── utils.md
│   │   │   ├── video.md
│   │   │   └── visualization.md
│   │   ├── examples/
│   │   │   ├── config_cifar10.py
│   │   │   ├── dist_train_cifar10.sh
│   │   │   ├── resnet_cifar.py
│   │   │   └── train_cifar10.py
│   │   ├── mmcv/
│   │   │   ├── __init__.py
│   │   │   ├── arraymisc/
│   │   │   │   ├── __init__.py
│   │   │   │   └── quantization.py
│   │   │   ├── cnn/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── alexnet.py
│   │   │   │   ├── bricks/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── activation.py
│   │   │   │   │   ├── conv.py
│   │   │   │   │   ├── conv_module.py
│   │   │   │   │   ├── hsigmoid.py
│   │   │   │   │   ├── hswish.py
│   │   │   │   │   ├── non_local.py
│   │   │   │   │   ├── norm.py
│   │   │   │   │   ├── padding.py
│   │   │   │   │   ├── registry.py
│   │   │   │   │   ├── scale.py
│   │   │   │   │   └── upsample.py
│   │   │   │   ├── resnet.py
│   │   │   │   ├── utils/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── flops_counter.py
│   │   │   │   │   └── weight_init.py
│   │   │   │   └── vgg.py
│   │   │   ├── fileio/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── file_client.py
│   │   │   │   ├── handlers/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── json_handler.py
│   │   │   │   │   ├── pickle_handler.py
│   │   │   │   │   └── yaml_handler.py
│   │   │   │   ├── io.py
│   │   │   │   └── parse.py
│   │   │   ├── image/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── colorspace.py
│   │   │   │   ├── geometric.py
│   │   │   │   ├── io.py
│   │   │   │   └── photometric.py
│   │   │   ├── model_zoo/
│   │   │   │   ├── deprecated.json
│   │   │   │   └── open_mmlab.json
│   │   │   ├── parallel/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── _functions.py
│   │   │   │   ├── collate.py
│   │   │   │   ├── data_container.py
│   │   │   │   ├── data_parallel.py
│   │   │   │   ├── distributed.py
│   │   │   │   ├── distributed_deprecated.py
│   │   │   │   ├── registry.py
│   │   │   │   ├── scatter_gather.py
│   │   │   │   └── utils.py
│   │   │   ├── runner/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base_runner.py
│   │   │   │   ├── checkpoint.py
│   │   │   │   ├── dist_utils.py
│   │   │   │   ├── epoch_based_runner.py
│   │   │   │   ├── hooks/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── checkpoint.py
│   │   │   │   │   ├── closure.py
│   │   │   │   │   ├── hook.py
│   │   │   │   │   ├── iter_timer.py
│   │   │   │   │   ├── logger/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── base.py
│   │   │   │   │   │   ├── mlflow.py
│   │   │   │   │   │   ├── pavi.py
│   │   │   │   │   │   ├── tensorboard.py
│   │   │   │   │   │   ├── text.py
│   │   │   │   │   │   └── wandb.py
│   │   │   │   │   ├── lr_updater.py
│   │   │   │   │   ├── memory.py
│   │   │   │   │   ├── momentum_updater.py
│   │   │   │   │   ├── optimizer.py
│   │   │   │   │   └── sampler_seed.py
│   │   │   │   ├── iter_based_runner.py
│   │   │   │   ├── log_buffer.py
│   │   │   │   ├── optimizer/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── builder.py
│   │   │   │   │   └── default_constructor.py
│   │   │   │   ├── priority.py
│   │   │   │   └── utils.py
│   │   │   ├── utils/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── config.py
│   │   │   │   ├── env.py
│   │   │   │   ├── logging.py
│   │   │   │   ├── misc.py
│   │   │   │   ├── parrots_wrapper.py
│   │   │   │   ├── path.py
│   │   │   │   ├── progressbar.py
│   │   │   │   ├── registry.py
│   │   │   │   └── timer.py
│   │   │   ├── version.py
│   │   │   ├── video/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── io.py
│   │   │   │   ├── optflow.py
│   │   │   │   ├── optflow_warp/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── flow_warp.cpp
│   │   │   │   │   ├── flow_warp.hpp
│   │   │   │   │   └── flow_warp_module.pyx
│   │   │   │   └── processing.py
│   │   │   └── visualization/
│   │   │       ├── __init__.py
│   │   │       ├── color.py
│   │   │       ├── image.py
│   │   │       └── optflow.py
│   │   ├── requirements.txt
│   │   ├── setup.cfg
│   │   ├── setup.py
│   │   └── tests/
│   │       ├── data/
│   │       │   ├── config/
│   │       │   │   ├── a.b.py
│   │       │   │   ├── a.py
│   │       │   │   ├── b.json
│   │       │   │   ├── base.py
│   │       │   │   ├── c.yaml
│   │       │   │   ├── code.py
│   │       │   │   ├── d.py
│   │       │   │   ├── delete.py
│   │       │   │   ├── e.py
│   │       │   │   ├── f.py
│   │       │   │   ├── g.py
│   │       │   │   ├── i_base.py
│   │       │   │   ├── i_child.py
│   │       │   │   ├── l.py
│   │       │   │   ├── l1.py
│   │       │   │   ├── l2.yaml
│   │       │   │   ├── l3.json
│   │       │   │   ├── l4.py
│   │       │   │   ├── m.py
│   │       │   │   └── n.py
│   │       │   ├── demo.lmdb/
│   │       │   │   ├── data.mdb
│   │       │   │   └── lock.mdb
│   │       │   ├── filelist.txt
│   │       │   ├── for_scan/
│   │       │   │   ├── 1.json
│   │       │   │   ├── 1.txt
│   │       │   │   ├── 2.json
│   │       │   │   ├── 2.txt
│   │       │   │   └── sub/
│   │       │   │       ├── 1.json
│   │       │   │       └── 1.txt
│   │       │   ├── mapping.txt
│   │       │   ├── model_zoo/
│   │       │   │   ├── deprecated.json
│   │       │   │   ├── mmcv_home/
│   │       │   │   │   ├── open_mmlab.json
│   │       │   │   │   ├── test.pth
│   │       │   │   │   └── val.pth
│   │       │   │   └── open_mmlab.json
│   │       │   ├── optflow.flo
│   │       │   └── patches/
│   │       │       ├── 0.npy
│   │       │       ├── 1.npy
│   │       │       ├── 2.npy
│   │       │       ├── 3.npy
│   │       │       ├── 4.npy
│   │       │       ├── pad0_0.npy
│   │       │       ├── pad0_1.npy
│   │       │       ├── pad0_2.npy
│   │       │       ├── pad0_3.npy
│   │       │       ├── pad0_4.npy
│   │       │       ├── pad_0.npy
│   │       │       ├── pad_1.npy
│   │       │       ├── pad_2.npy
│   │       │       ├── pad_3.npy
│   │       │       ├── pad_4.npy
│   │       │       ├── scale_0.npy
│   │       │       ├── scale_1.npy
│   │       │       ├── scale_2.npy
│   │       │       ├── scale_3.npy
│   │       │       └── scale_4.npy
│   │       ├── test_arraymisc.py
│   │       ├── test_cnn/
│   │       │   ├── test_build_layers.py
│   │       │   ├── test_conv_module.py
│   │       │   ├── test_flops_counter.py
│   │       │   ├── test_hsigmoid.py
│   │       │   ├── test_hswish.py
│   │       │   ├── test_non_local.py
│   │       │   ├── test_scale.py
│   │       │   └── test_weight_init.py
│   │       ├── test_config.py
│   │       ├── test_fileclient.py
│   │       ├── test_fileio.py
│   │       ├── test_image/
│   │       │   ├── test_colorspace.py
│   │       │   ├── test_geometric.py
│   │       │   ├── test_io.py
│   │       │   └── test_photometric.py
│   │       ├── test_load_model_zoo.py
│   │       ├── test_logging.py
│   │       ├── test_misc.py
│   │       ├── test_optimizer.py
│   │       ├── test_parallel.py
│   │       ├── test_path.py
│   │       ├── test_progressbar.py
│   │       ├── test_registry.py
│   │       ├── test_runner/
│   │       │   ├── test_dist_utils.py
│   │       │   ├── test_hooks.py
│   │       │   └── test_runner.py
│   │       ├── test_timer.py
│   │       ├── test_video/
│   │       │   ├── test_optflow.py
│   │       │   ├── test_processing.py
│   │       │   └── test_reader.py
│   │       └── test_visualization.py
│   ├── mmdet/
│   │   ├── VERSION
│   │   ├── __init__.py
│   │   ├── apis/
│   │   │   ├── __init__.py
│   │   │   ├── inference.py
│   │   │   ├── test.py
│   │   │   └── train.py
│   │   ├── core/
│   │   │   ├── __init__.py
│   │   │   ├── anchor/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── anchor_generator.py
│   │   │   │   ├── builder.py
│   │   │   │   ├── point_generator.py
│   │   │   │   └── utils.py
│   │   │   ├── bbox/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── assigners/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── approx_max_iou_assigner.py
│   │   │   │   │   ├── assign_result.py
│   │   │   │   │   ├── atss_assigner.py
│   │   │   │   │   ├── base_assigner.py
│   │   │   │   │   ├── center_region_assigner.py
│   │   │   │   │   ├── centroid_assigner.py
│   │   │   │   │   ├── fcos_assigner.py
│   │   │   │   │   ├── max_iou_assigner.py
│   │   │   │   │   ├── point_assigner.py
│   │   │   │   │   ├── point_assigner_v2.py
│   │   │   │   │   ├── point_ct_assigner.py
│   │   │   │   │   └── point_hm_assigner.py
│   │   │   │   ├── builder.py
│   │   │   │   ├── coder/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base_bbox_coder.py
│   │   │   │   │   ├── delta_xywh_bbox_coder.py
│   │   │   │   │   ├── legacy_delta_xywh_bbox_coder.py
│   │   │   │   │   ├── pseudo_bbox_coder.py
│   │   │   │   │   └── tblr_bbox_coder.py
│   │   │   │   ├── demodata.py
│   │   │   │   ├── iou_calculators/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── builder.py
│   │   │   │   │   └── iou2d_calculator.py
│   │   │   │   ├── samplers/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base_sampler.py
│   │   │   │   │   ├── combined_sampler.py
│   │   │   │   │   ├── instance_balanced_pos_sampler.py
│   │   │   │   │   ├── iou_balanced_neg_sampler.py
│   │   │   │   │   ├── ohem_sampler.py
│   │   │   │   │   ├── pseudo_sampler.py
│   │   │   │   │   ├── random_sampler.py
│   │   │   │   │   ├── sampling_result.py
│   │   │   │   │   └── score_hlr_sampler.py
│   │   │   │   └── transforms.py
│   │   │   ├── evaluation/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── bbox_overlaps.py
│   │   │   │   ├── class_names.py
│   │   │   │   ├── eval_hooks.py
│   │   │   │   ├── mean_ap.py
│   │   │   │   └── recall.py
│   │   │   ├── fp16/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── decorators.py
│   │   │   │   ├── hooks.py
│   │   │   │   └── utils.py
│   │   │   ├── mask/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── mask_target.py
│   │   │   │   ├── structures.py
│   │   │   │   └── utils.py
│   │   │   ├── post_processing/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── bbox_nms.py
│   │   │   │   └── merge_augs.py
│   │   │   └── utils/
│   │   │       ├── __init__.py
│   │   │       ├── dist_utils.py
│   │   │       └── misc.py
│   │   ├── datasets/
│   │   │   ├── __init__.py
│   │   │   ├── builder.py
│   │   │   ├── cityscapes.py
│   │   │   ├── coco.py
│   │   │   ├── coco_pose.py
│   │   │   ├── custom.py
│   │   │   ├── dataset_wrappers.py
│   │   │   ├── deepfashion.py
│   │   │   ├── lvis.py
│   │   │   ├── pipelines/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── auto_augment.py
│   │   │   │   ├── compose.py
│   │   │   │   ├── formating.py
│   │   │   │   ├── formating_reppointsv2.py
│   │   │   │   ├── instaboost.py
│   │   │   │   ├── loading.py
│   │   │   │   ├── loading_reppointsv2.py
│   │   │   │   ├── test_time_aug.py
│   │   │   │   └── transforms.py
│   │   │   ├── samplers/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── distributed_sampler.py
│   │   │   │   └── group_sampler.py
│   │   │   ├── voc.py
│   │   │   ├── wider_face.py
│   │   │   └── xml_style.py
│   │   ├── models/
│   │   │   ├── __init__.py
│   │   │   ├── backbones/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── detectors_resnet.py
│   │   │   │   ├── detectors_resnext.py
│   │   │   │   ├── hourglass.py
│   │   │   │   ├── hrnet.py
│   │   │   │   ├── mobilenet.py
│   │   │   │   ├── regnet.py
│   │   │   │   ├── res2net.py
│   │   │   │   ├── resnet.py
│   │   │   │   ├── resnext.py
│   │   │   │   └── ssd_vgg.py
│   │   │   ├── builder.py
│   │   │   ├── dense_heads/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── anchor_free_head.py
│   │   │   │   ├── anchor_head.py
│   │   │   │   ├── atss_head.py
│   │   │   │   ├── base_dense_head.py
│   │   │   │   ├── dense_reppoints_head.py
│   │   │   │   ├── dense_reppoints_v2_head.py
│   │   │   │   ├── fcos_head.py
│   │   │   │   ├── fovea_head.py
│   │   │   │   ├── free_anchor_retina_head.py
│   │   │   │   ├── fsaf_head.py
│   │   │   │   ├── ga_retina_head.py
│   │   │   │   ├── ga_rpn_head.py
│   │   │   │   ├── gfl_head.py
│   │   │   │   ├── guided_anchor_head.py
│   │   │   │   ├── lscpvnet_head.py
│   │   │   │   ├── lsnet_head.py
│   │   │   │   ├── nasfcos_head.py
│   │   │   │   ├── pisa_retinanet_head.py
│   │   │   │   ├── pisa_ssd_head.py
│   │   │   │   ├── reppoints_head.py
│   │   │   │   ├── reppoints_v2_head.py
│   │   │   │   ├── retina_head.py
│   │   │   │   ├── retina_sepbn_head.py
│   │   │   │   ├── rpn_head.py
│   │   │   │   ├── rpn_test_mixin.py
│   │   │   │   └── ssd_head.py
│   │   │   ├── detectors/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── atss.py
│   │   │   │   ├── base.py
│   │   │   │   ├── cascade_rcnn.py
│   │   │   │   ├── dense_reppoints_detector.py
│   │   │   │   ├── dense_reppoints_v2_detector.py
│   │   │   │   ├── fast_rcnn.py
│   │   │   │   ├── faster_rcnn.py
│   │   │   │   ├── fcos.py
│   │   │   │   ├── fovea.py
│   │   │   │   ├── fsaf.py
│   │   │   │   ├── gfl.py
│   │   │   │   ├── grid_rcnn.py
│   │   │   │   ├── htc.py
│   │   │   │   ├── lscpvnet.py
│   │   │   │   ├── lsnet.py
│   │   │   │   ├── mask_rcnn.py
│   │   │   │   ├── mask_scoring_rcnn.py
│   │   │   │   ├── nasfcos.py
│   │   │   │   ├── point_rend.py
│   │   │   │   ├── reppoints_detector.py
│   │   │   │   ├── reppoints_v2_detector.py
│   │   │   │   ├── retinanet.py
│   │   │   │   ├── rpn.py
│   │   │   │   ├── single_stage.py
│   │   │   │   └── two_stage.py
│   │   │   ├── losses/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── accuracy.py
│   │   │   │   ├── ae_loss.py
│   │   │   │   ├── balanced_l1_loss.py
│   │   │   │   ├── chamfer_loss.py
│   │   │   │   ├── cross_entropy_loss.py
│   │   │   │   ├── cross_iou_loss.py
│   │   │   │   ├── focal_loss.py
│   │   │   │   ├── gaussian_focal_loss.py
│   │   │   │   ├── gfocal_loss.py
│   │   │   │   ├── ghm_loss.py
│   │   │   │   ├── iou_loss.py
│   │   │   │   ├── mse_loss.py
│   │   │   │   ├── pisa_loss.py
│   │   │   │   ├── smooth_l1_loss.py
│   │   │   │   └── utils.py
│   │   │   ├── necks/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── bfp.py
│   │   │   │   ├── fpn.py
│   │   │   │   ├── fpn_carafe.py
│   │   │   │   ├── hrfpn.py
│   │   │   │   ├── nas_fpn.py
│   │   │   │   ├── nasfcos_fpn.py
│   │   │   │   ├── pafpn.py
│   │   │   │   └── rfp.py
│   │   │   ├── roi_heads/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base_roi_head.py
│   │   │   │   ├── bbox_heads/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── bbox_head.py
│   │   │   │   │   ├── convfc_bbox_head.py
│   │   │   │   │   └── double_bbox_head.py
│   │   │   │   ├── cascade_roi_head.py
│   │   │   │   ├── double_roi_head.py
│   │   │   │   ├── dynamic_roi_head.py
│   │   │   │   ├── grid_roi_head.py
│   │   │   │   ├── htc_roi_head.py
│   │   │   │   ├── mask_heads/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── coarse_mask_head.py
│   │   │   │   │   ├── fcn_mask_head.py
│   │   │   │   │   ├── fused_semantic_head.py
│   │   │   │   │   ├── grid_head.py
│   │   │   │   │   ├── htc_mask_head.py
│   │   │   │   │   ├── mask_point_head.py
│   │   │   │   │   └── maskiou_head.py
│   │   │   │   ├── mask_scoring_roi_head.py
│   │   │   │   ├── pisa_roi_head.py
│   │   │   │   ├── point_rend_roi_head.py
│   │   │   │   ├── roi_extractors/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base_roi_extractor.py
│   │   │   │   │   ├── generic_roi_extractor.py
│   │   │   │   │   └── single_level_roi_extractor.py
│   │   │   │   ├── shared_heads/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── res_layer.py
│   │   │   │   ├── standard_roi_head.py
│   │   │   │   └── test_mixins.py
│   │   │   └── utils/
│   │   │       ├── __init__.py
│   │   │       └── res_layer.py
│   │   ├── ops/
│   │   │   ├── __init__.py
│   │   │   ├── carafe/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── carafe.py
│   │   │   │   ├── grad_check.py
│   │   │   │   ├── setup.py
│   │   │   │   └── src/
│   │   │   │       ├── carafe_ext.cpp
│   │   │   │       ├── carafe_naive_ext.cpp
│   │   │   │       └── cuda/
│   │   │   │           ├── carafe_cuda.cpp
│   │   │   │           ├── carafe_cuda_kernel.cu
│   │   │   │           ├── carafe_naive_cuda.cpp
│   │   │   │           └── carafe_naive_cuda_kernel.cu
│   │   │   ├── chamfer_2d/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── dist_chamfer_2d.py
│   │   │   │   └── src/
│   │   │   │       ├── chamfer_2d.cu
│   │   │   │       └── chamfer_cuda.cpp
│   │   │   ├── context_block.py
│   │   │   ├── conv_ws.py
│   │   │   ├── corner_pool/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── corner_pool.py
│   │   │   │   └── src/
│   │   │   │       └── corner_pool.cpp
│   │   │   ├── dcn/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── deform_conv.py
│   │   │   │   ├── deform_pool.py
│   │   │   │   └── src/
│   │   │   │       ├── cuda/
│   │   │   │       │   ├── deform_conv_cuda.cpp
│   │   │   │       │   ├── deform_conv_cuda_kernel.cu
│   │   │   │       │   ├── deform_pool_cuda.cpp
│   │   │   │       │   └── deform_pool_cuda_kernel.cu
│   │   │   │       ├── deform_conv_ext.cpp
│   │   │   │       └── deform_pool_ext.cpp
│   │   │   ├── generalized_attention.py
│   │   │   ├── masked_conv/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── masked_conv.py
│   │   │   │   └── src/
│   │   │   │       ├── cuda/
│   │   │   │       │   ├── masked_conv2d_cuda.cpp
│   │   │   │       │   └── masked_conv2d_kernel.cu
│   │   │   │       └── masked_conv2d_ext.cpp
│   │   │   ├── merge_cells.py
│   │   │   ├── nms/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── nms_wrapper.py
│   │   │   │   └── src/
│   │   │   │       ├── cpu/
│   │   │   │       │   └── nms_cpu.cpp
│   │   │   │       ├── cuda/
│   │   │   │       │   ├── nms_cuda.cpp
│   │   │   │       │   └── nms_kernel.cu
│   │   │   │       └── nms_ext.cpp
│   │   │   ├── non_local.py
│   │   │   ├── plugin.py
│   │   │   ├── point_sample.py
│   │   │   ├── roi_align/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── gradcheck.py
│   │   │   │   ├── roi_align.py
│   │   │   │   └── src/
│   │   │   │       ├── cpu/
│   │   │   │       │   └── roi_align_v2.cpp
│   │   │   │       ├── cuda/
│   │   │   │       │   ├── roi_align_kernel.cu
│   │   │   │       │   └── roi_align_kernel_v2.cu
│   │   │   │       └── roi_align_ext.cpp
│   │   │   ├── roi_pool/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── gradcheck.py
│   │   │   │   ├── roi_pool.py
│   │   │   │   └── src/
│   │   │   │       ├── cuda/
│   │   │   │       │   └── roi_pool_kernel.cu
│   │   │   │       └── roi_pool_ext.cpp
│   │   │   ├── saconv.py
│   │   │   ├── sigmoid_focal_loss/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── sigmoid_focal_loss.py
│   │   │   │   └── src/
│   │   │   │       ├── cuda/
│   │   │   │       │   └── sigmoid_focal_loss_cuda.cu
│   │   │   │       └── sigmoid_focal_loss_ext.cpp
│   │   │   ├── utils/
│   │   │   │   ├── __init__.py
│   │   │   │   └── src/
│   │   │   │       └── compiling_info.cpp
│   │   │   └── wrappers.py
│   │   └── utils/
│   │       ├── __init__.py
│   │       ├── collect_env.py
│   │       ├── contextmanagers.py
│   │       ├── logger.py
│   │       ├── profiling.py
│   │       └── util_mixins.py
│   ├── pytest.ini
│   ├── requirements/
│   │   ├── build.txt
│   │   ├── docs.txt
│   │   ├── optional.txt
│   │   ├── readthedocs.txt
│   │   ├── runtime.txt
│   │   └── tests.txt
│   ├── requirements.txt
│   ├── setup.py
│   ├── tests/
│   │   ├── async_benchmark.py
│   │   ├── test_anchor.py
│   │   ├── test_assigner.py
│   │   ├── test_async.py
│   │   ├── test_backbone.py
│   │   ├── test_config.py
│   │   ├── test_dataset.py
│   │   ├── test_forward.py
│   │   ├── test_fp16.py
│   │   ├── test_heads.py
│   │   ├── test_losses.py
│   │   ├── test_masks.py
│   │   ├── test_necks.py
│   │   ├── test_ops/
│   │   │   ├── test_corner_pool.py
│   │   │   ├── test_merge_cells.py
│   │   │   ├── test_nms.py
│   │   │   ├── test_soft_nms.py
│   │   │   └── test_wrappers.py
│   │   ├── test_pipelines/
│   │   │   ├── test_formatting.py
│   │   │   ├── test_loading.py
│   │   │   ├── test_models_aug_test.py
│   │   │   └── test_transform.py
│   │   ├── test_pisa_heads.py
│   │   ├── test_roi_extractor.py
│   │   └── test_sampler.py
│   ├── tools/
│   │   ├── analyze_logs.py
│   │   ├── benchmark.py
│   │   ├── browse_dataset.py
│   │   ├── coco_error_analysis.py
│   │   ├── convert_datasets/
│   │   │   ├── cityscapes.py
│   │   │   └── pascal_voc.py
│   │   ├── detectron2pytorch.py
│   │   ├── dist_test.sh
│   │   ├── dist_train.sh
│   │   ├── fuse_conv_bn.py
│   │   ├── gen_coco_lsvr.py
│   │   ├── get_flops.py
│   │   ├── print_config.py
│   │   ├── publish_model.py
│   │   ├── pytorch2onnx.py
│   │   ├── regnet2mmdet.py
│   │   ├── robustness_eval.py
│   │   ├── slurm_test.sh
│   │   ├── slurm_train.sh
│   │   ├── test.py
│   │   ├── test_robustness.py
│   │   ├── train.py
│   │   └── upgrade_model_version.py
│   └── visualization/
│       └── 000.txt
└── logs/
    └── 000.txt
Download .txt
Showing preview only (231K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2934 symbols across 398 files)

FILE: code/cocoapi/lvis/lvis/colormap.py
  function colormap (line 6) | def colormap(rgb=False):

FILE: code/cocoapi/lvis/lvis/eval.py
  class LVISEval (line 13) | class LVISEval:
    method __init__ (line 14) | def __init__(self, lvis_gt, lvis_dt, iou_type='segm'):
    method _to_mask (line 54) | def _to_mask(self, anns, lvis):
    method _prepare (line 59) | def _prepare(self):
    method _prepare_freq_group (line 110) | def _prepare_freq_group(self):
    method evaluate (line 118) | def evaluate(self):
    method _get_gt_dt (line 146) | def _get_gt_dt(self, img_id, cat_id):
    method compute_iou (line 165) | def compute_iou(self, img_id, cat_id):
    method evaluate_img (line 191) | def evaluate_img(self, img_id, cat_id, area_rng):
    method accumulate (line 288) | def accumulate(self):
    method _summarize (line 411) | def _summarize(self,
    method summarize (line 443) | def summarize(self):
    method run (line 467) | def run(self):
    method print_results (line 473) | def print_results(self):
    method get_results (line 506) | def get_results(self):
  class Params (line 512) | class Params:
    method __init__ (line 513) | def __init__(self, iou_type):

FILE: code/cocoapi/lvis/lvis/lvis.py
  class LVIS (line 18) | class LVIS:
    method __init__ (line 19) | def __init__(self, annotation_path):
    method _load_json (line 34) | def _load_json(self, path):
    method _create_index (line 38) | def _create_index(self):
    method get_ann_ids (line 63) | def get_ann_ids(self, img_ids=None, cat_ids=None, area_rng=None):
    method get_cat_ids (line 97) | def get_cat_ids(self):
    method get_img_ids (line 105) | def get_img_ids(self):
    method _load_helper (line 113) | def _load_helper(self, _dict, ids):
    method load_anns (line 119) | def load_anns(self, ids=None):
    method load_cats (line 130) | def load_cats(self, ids):
    method load_imgs (line 142) | def load_imgs(self, ids):
    method download (line 153) | def download(self, save_dir, img_ids=None):
    method ann_to_rle (line 169) | def ann_to_rle(self, ann):
    method ann_to_mask (line 193) | def ann_to_mask(self, ann):

FILE: code/cocoapi/lvis/lvis/results.py
  class LVISResults (line 10) | class LVISResults(LVIS):
    method __init__ (line 11) | def __init__(self, lvis_gt, results, max_dets=300):
    method limit_dets_per_image (line 75) | def limit_dets_per_image(self, anns, max_dets):
    method get_top_results (line 88) | def get_top_results(self, img_id, score_thrs):

FILE: code/cocoapi/lvis/lvis/vis.py
  class LVISVis (line 14) | class LVISVis:
    method __init__ (line 15) | def __init__(self, lvis_gt, lvis_dt=None, img_dir=None, dpi=75):
    method coco_segm_to_poly (line 53) | def coco_segm_to_poly(self, _list):
    method get_synset (line 59) | def get_synset(self, idx):
    method setup_figure (line 65) | def setup_figure(self, img, title='', dpi=75):
    method vis_bbox (line 75) | def vis_bbox(self, ax, bbox, box_alpha=0.5, edgecolor='g', linestyle='...
    method vis_text (line 89) | def vis_text(self, ax, bbox, text, color='w'):
    method vis_mask (line 101) | def vis_mask(self, ax, segm, color):
    method get_color (line 111) | def get_color(self, idx):
    method load_img (line 115) | def load_img(self, img_id):
    method vis_img (line 124) | def vis_img(self,
    method vis_result (line 162) | def vis_result(self,

FILE: code/cocoapi/pycocotools/common/gason.cpp
  function isspace (line 52) | static inline bool isspace(char c) {
  function isdelim (line 56) | static inline bool isdelim(char c) {
  function isdigit (line 60) | static inline bool isdigit(char c) {
  function isxdigit (line 64) | static inline bool isxdigit(char c) {
  function char2int (line 68) | static inline int char2int(char c) {
  function string2double (line 74) | static double string2double(char *s, char **endptr) {
  function JsonNode (line 120) | static inline JsonNode *insertAfter(JsonNode *tail, JsonNode *node) {
  function JsonValue (line 128) | static inline JsonValue listToValue(JsonTag tag, JsonNode *tail) {
  function jsonParse (line 137) | int jsonParse(char *s, char **endptr, JsonValue *value, JsonAllocator &a...

FILE: code/cocoapi/pycocotools/common/gason.h
  type JsonTag (line 8) | enum JsonTag {
  type JsonNode (line 18) | struct JsonNode
  function JsonNode (line 54) | JsonNode *toNode() const {
  type JsonNode (line 60) | struct JsonNode {
  type JsonIterator (line 66) | struct JsonIterator {
  function JsonIterator (line 86) | inline JsonIterator end(JsonValue) {

FILE: code/cocoapi/pycocotools/common/maskApi.c
  function uint (line 11) | uint umin( uint a, uint b ) { return (a<b) ? a : b; }
  function uint (line 12) | uint umax( uint a, uint b ) { return (a>b) ? a : b; }
  function rleInit (line 14) | void rleInit( RLE *R, siz h, siz w, siz m, uint *cnts ) {
  function rleFree (line 19) | void rleFree( RLE *R ) {
  function rlesInit (line 23) | void rlesInit( RLE **R, siz n ) {
  function rlesFree (line 28) | void rlesFree( RLE **R, siz n ) {
  function rleEncode (line 32) | void rleEncode( RLE *R, const byte *M, siz h, siz w, siz n ) {
  function rleDecode (line 43) | void rleDecode( const RLE *R, byte *M, siz n ) {
  function rleMerge (line 49) | void rleMerge( const RLE *R, RLE *M, siz n, int intersect ) {
  function rleArea (line 72) | void rleArea( const RLE *R, siz n, uint *a ) {
  function rleIou (line 77) | void rleIou( RLE *dt, RLE *gt, siz m, siz n, byte *iscrowd, double *o ) {
  function rleNms (line 98) | void rleNms( RLE *dt, siz n, uint *keep, double thr ) {
  function bbIou (line 109) | void bbIou( BB dt, BB gt, siz m, siz n, byte *iscrowd, double *o ) {
  function bbNms (line 122) | void bbNms( BB dt, siz n, uint *keep, double thr ) {
  function rleToBbox (line 133) | void rleToBbox( const RLE *R, BB bb, siz n ) {
  function rleFrBbox (line 149) | void rleFrBbox( RLE *R, const BB bb, siz h, siz w, siz n ) {
  function uintCompare (line 158) | int uintCompare(const void *a, const void *b) {
  function rleFrPoly (line 162) | void rleFrPoly( RLE *R, const double *xy, siz k, siz h, siz w ) {
  function rleFrString (line 218) | void rleFrString( RLE *R, char *s, siz h, siz w ) {

FILE: code/cocoapi/pycocotools/common/maskApi.h
  type uint (line 9) | typedef unsigned int uint;
  type siz (line 10) | typedef unsigned long siz;
  type byte (line 11) | typedef unsigned char byte;
  type RLE (line 13) | typedef struct { siz h, w, m; uint *cnts; } RLE;

FILE: code/cocoapi/pycocotools/pycocotools/coco.py
  function _isArrayLike (line 64) | def _isArrayLike(obj):
  class COCO (line 68) | class COCO:
    method __init__ (line 69) | def __init__(self, annotation_file=None):
    method createIndex (line 96) | def createIndex(self):
    method info (line 127) | def info(self):
    method getAnnIds (line 135) | def getAnnIds(self, imgIds=[], catIds=[], areaRng=[], iscrowd=None):
    method get_ann_ids (line 174) | def get_ann_ids(self, img_ids=[], cat_ids=[], area_rng=[], iscrowd=None):
    method getCatIds (line 177) | def getCatIds(self, catNms=[], supNms=[], catIds=[]):
    method get_cat_ids (line 205) | def get_cat_ids(self, cat_names=[], sup_names=[], cat_ids=[]):
    method getImgIds (line 208) | def getImgIds(self, imgIds=[], catIds=[]):
    method get_img_ids (line 229) | def get_img_ids(self, img_ids=[], cat_ids=[]):
    method loadAnns (line 232) | def loadAnns(self, ids=[]):
    method loadCats (line 245) | def loadCats(self, ids=[]):
    method loadImgs (line 258) | def loadImgs(self, ids=[]):
    method showAnns (line 271) | def showAnns(self, anns, draw_bbox=False):
    method loadRes (line 367) | def loadRes(self, resFile):
    method download (line 436) | def download(self, tarDir=None, imgIds=[]):
    method loadNumpyAnnotations (line 462) | def loadNumpyAnnotations(self, data):
    method annToRLE (line 486) | def annToRLE(self, ann):
    method annToMask (line 509) | def annToMask(self, ann):

FILE: code/cocoapi/pycocotools/pycocotools/cocoeval.py
  class COCOeval (line 13) | class COCOeval:
    method __init__ (line 63) | def __init__(self, cocoGt=None, cocoDt=None, iouType='segm'):
    method _prepare (line 87) | def _prepare(self):
    method evaluate (line 128) | def evaluate(self):
    method computeIoU (line 170) | def computeIoU(self, imgId, catId):
    method computeOks (line 199) | def computeOks(self, imgId, catId):
    method evaluateImg (line 250) | def evaluateImg(self, imgId, catId, aRng, maxDet):
    method accumulate (line 334) | def accumulate(self, p=None):
    method summarize (line 456) | def summarize(self):
    method __str__ (line 551) | def __str__(self):
  class Params (line 555) | class Params:
    method setDetParams (line 559) | def setDetParams(self):
    method setKpParams (line 578) | def setKpParams(self):
    method __init__ (line 600) | def __init__(self, iouType='segm'):

FILE: code/cocoapi/pycocotools/pycocotools/mask.py
  function encode (line 84) | def encode(bimask):
  function decode (line 92) | def decode(rleObjs):
  function area (line 99) | def area(rleObjs):
  function toBbox (line 106) | def toBbox(rleObjs):

FILE: code/mmcv/examples/resnet_cifar.py
  class BasicBlock (line 8) | class BasicBlock(nn.Module):
    method __init__ (line 11) | def __init__(self, in_planes, planes, stride=1):
    method forward (line 35) | def forward(self, x):
  class Bottleneck (line 43) | class Bottleneck(nn.Module):
    method __init__ (line 46) | def __init__(self, in_planes, planes, stride=1):
    method forward (line 72) | def forward(self, x):
  class ResNet (line 81) | class ResNet(nn.Module):
    method __init__ (line 83) | def __init__(self, block, num_blocks, num_classes=10):
    method _make_layer (line 96) | def _make_layer(self, block, planes, num_blocks, stride):
    method forward (line 104) | def forward(self, x):
  function resnet18 (line 116) | def resnet18():
  function resnet34 (line 120) | def resnet34():
  function resnet50 (line 124) | def resnet50():
  function resnet101 (line 128) | def resnet101():
  function resnet152 (line 132) | def resnet152():

FILE: code/mmcv/examples/train_cifar10.py
  function accuracy (line 20) | def accuracy(output, target, topk=(1, )):
  function batch_processor (line 37) | def batch_processor(model, data, train_mode):
  function get_logger (line 51) | def get_logger(log_level):
  function init_dist (line 58) | def init_dist(backend='nccl', **kwargs):
  function parse_args (line 67) | def parse_args():
  function main (line 79) | def main():

FILE: code/mmcv/mmcv/arraymisc/quantization.py
  function quantize (line 5) | def quantize(arr, min_val, max_val, levels, dtype=np.int64):
  function dequantize (line 32) | def dequantize(arr, min_val, max_val, levels, dtype=np.float64):

FILE: code/mmcv/mmcv/cnn/alexnet.py
  class AlexNet (line 9) | class AlexNet(nn.Module):
    method __init__ (line 16) | def __init__(self, num_classes=-1):
    method init_weights (line 45) | def init_weights(self, pretrained=None):
    method forward (line 55) | def forward(self, x):

FILE: code/mmcv/mmcv/cnn/bricks/activation.py
  function build_activation_layer (line 13) | def build_activation_layer(cfg):

FILE: code/mmcv/mmcv/cnn/bricks/conv.py
  function build_conv_layer (line 11) | def build_conv_layer(cfg, *args, **kwargs):

FILE: code/mmcv/mmcv/cnn/bricks/conv_module.py
  class ConvModule (line 12) | class ConvModule(nn.Module):
    method __init__ (line 57) | def __init__(self,
    method norm (line 151) | def norm(self):
    method init_weights (line 154) | def init_weights(self):
    method forward (line 174) | def forward(self, x, activate=True, norm=True):

FILE: code/mmcv/mmcv/cnn/bricks/hsigmoid.py
  class HSigmoid (line 7) | class HSigmoid(nn.Module):
    method __init__ (line 15) | def __init__(self):
    method forward (line 18) | def forward(self, x):

FILE: code/mmcv/mmcv/cnn/bricks/hswish.py
  class HSwish (line 7) | class HSwish(nn.Module):
    method __init__ (line 19) | def __init__(self, inplace=False):
    method forward (line 23) | def forward(self, x):

FILE: code/mmcv/mmcv/cnn/bricks/non_local.py
  class _NonLocalNd (line 10) | class _NonLocalNd(nn.Module, metaclass=ABCMeta):
    method __init__ (line 32) | def __init__(self,
    method init_weights (line 82) | def init_weights(self, std=0.01, zeros_init=True):
    method embedded_gaussian (line 96) | def embedded_gaussian(self, theta_x, phi_x):
    method dot_product (line 107) | def dot_product(self, theta_x, phi_x):
    method forward (line 115) | def forward(self, x):
  class NonLocal1d (line 160) | class NonLocal1d(_NonLocalNd):
    method __init__ (line 172) | def __init__(self,
  class NonLocal2d (line 188) | class NonLocal2d(_NonLocalNd):
    method __init__ (line 200) | def __init__(self,
  class NonLocal3d (line 216) | class NonLocal3d(_NonLocalNd):
    method __init__ (line 228) | def __init__(self,

FILE: code/mmcv/mmcv/cnn/bricks/norm.py
  function infer_abbr (line 22) | def infer_abbr(class_type):
  function build_norm_layer (line 71) | def build_norm_layer(cfg, num_features, postfix=''):
  function is_norm (line 121) | def is_norm(layer, exclude=None):

FILE: code/mmcv/mmcv/cnn/bricks/padding.py
  function build_padding_layer (line 10) | def build_padding_layer(cfg, *args, **kwargs):

FILE: code/mmcv/mmcv/cnn/bricks/scale.py
  class Scale (line 5) | class Scale(nn.Module):
    method __init__ (line 15) | def __init__(self, scale=1.0):
    method forward (line 19) | def forward(self, x):

FILE: code/mmcv/mmcv/cnn/bricks/upsample.py
  class PixelShufflePack (line 13) | class PixelShufflePack(nn.Module):
    method __init__ (line 27) | def __init__(self, in_channels, out_channels, scale_factor,
    method init_weights (line 41) | def init_weights(self):
    method forward (line 44) | def forward(self, x):
  function build_upsample_layer (line 50) | def build_upsample_layer(cfg, *args, **kwargs):

FILE: code/mmcv/mmcv/cnn/resnet.py
  function conv3x3 (line 11) | def conv3x3(in_planes, out_planes, stride=1, dilation=1):
  class BasicBlock (line 23) | class BasicBlock(nn.Module):
    method __init__ (line 26) | def __init__(self,
    method forward (line 46) | def forward(self, x):
  class Bottleneck (line 65) | class Bottleneck(nn.Module):
    method __init__ (line 68) | def __init__(self,
    method forward (line 111) | def forward(self, x):
  function make_res_layer (line 144) | def make_res_layer(block,
  class ResNet (line 182) | class ResNet(nn.Module):
    method __init__ (line 211) | def __init__(self,
    method init_weights (line 266) | def init_weights(self, pretrained=None):
    method forward (line 279) | def forward(self, x):
    method train (line 295) | def train(self, mode=True):

FILE: code/mmcv/mmcv/cnn/utils/flops_counter.py
  function get_model_complexity_info (line 34) | def get_model_complexity_info(model,
  function flops_to_string (line 114) | def flops_to_string(flops, units='GFLOPs', precision=2):
  function params_to_string (line 157) | def params_to_string(num_params, units=None, precision=2):
  function print_model_with_flops (line 194) | def print_model_with_flops(model,
  function get_model_parameters_number (line 303) | def get_model_parameters_number(model):
  function add_flops_counting_methods (line 316) | def add_flops_counting_methods(net_main_module):
  function compute_average_flops_cost (line 333) | def compute_average_flops_cost(self):
  function start_flops_count (line 351) | def start_flops_count(self):
  function stop_flops_count (line 374) | def stop_flops_count(self):
  function reset_flops_count (line 385) | def reset_flops_count(self):
  function empty_flops_counter_hook (line 396) | def empty_flops_counter_hook(module, input, output):
  function upsample_flops_counter_hook (line 400) | def upsample_flops_counter_hook(module, input, output):
  function relu_flops_counter_hook (line 409) | def relu_flops_counter_hook(module, input, output):
  function linear_flops_counter_hook (line 414) | def linear_flops_counter_hook(module, input, output):
  function pool_flops_counter_hook (line 421) | def pool_flops_counter_hook(module, input, output):
  function bn_flops_counter_hook (line 426) | def bn_flops_counter_hook(module, input, output):
  function deconv_flops_counter_hook (line 435) | def deconv_flops_counter_hook(conv_module, input, output):
  function conv_flops_counter_hook (line 462) | def conv_flops_counter_hook(conv_module, input, output):
  function batch_counter_hook (line 493) | def batch_counter_hook(module, input, output):
  function add_batch_counter_variables_or_reset (line 506) | def add_batch_counter_variables_or_reset(module):
  function add_batch_counter_hook_function (line 511) | def add_batch_counter_hook_function(module):
  function remove_batch_counter_hook_function (line 519) | def remove_batch_counter_hook_function(module):
  function add_flops_counter_variable_or_reset (line 525) | def add_flops_counter_variable_or_reset(module):
  function is_supported_instance (line 535) | def is_supported_instance(module):
  function remove_flops_counter_hook_function (line 541) | def remove_flops_counter_hook_function(module):

FILE: code/mmcv/mmcv/cnn/utils/weight_init.py
  function constant_init (line 6) | def constant_init(module, val, bias=0):
  function xavier_init (line 13) | def xavier_init(module, gain=1, bias=0, distribution='normal'):
  function normal_init (line 23) | def normal_init(module, mean=0, std=1, bias=0):
  function uniform_init (line 29) | def uniform_init(module, a=0, b=1, bias=0):
  function kaiming_init (line 35) | def kaiming_init(module,
  function caffe2_xavier_init (line 52) | def caffe2_xavier_init(module, bias=0):
  function bias_init_with_prob (line 63) | def bias_init_with_prob(prior_prob):

FILE: code/mmcv/mmcv/cnn/vgg.py
  function conv3x3 (line 10) | def conv3x3(in_planes, out_planes, dilation=1):
  function make_vgg_layer (line 20) | def make_vgg_layer(inplanes,
  class VGG (line 38) | class VGG(nn.Module):
    method __init__ (line 62) | def __init__(self,
    method init_weights (line 126) | def init_weights(self, pretrained=None):
    method forward (line 141) | def forward(self, x):
    method train (line 159) | def train(self, mode=True):

FILE: code/mmcv/mmcv/fileio/file_client.py
  class BaseStorageBackend (line 6) | class BaseStorageBackend(metaclass=ABCMeta):
    method get (line 15) | def get(self, filepath):
    method get_text (line 19) | def get_text(self, filepath):
  class CephBackend (line 23) | class CephBackend(BaseStorageBackend):
    method __init__ (line 32) | def __init__(self, path_mapping=None):
    method get (line 43) | def get(self, filepath):
    method get_text (line 52) | def get_text(self, filepath):
  class PetrelBackend (line 56) | class PetrelBackend(BaseStorageBackend):
    method __init__ (line 66) | def __init__(self, path_mapping=None, enable_mc=True):
    method get (line 77) | def get(self, filepath):
    method get_text (line 86) | def get_text(self, filepath):
  class MemcachedBackend (line 90) | class MemcachedBackend(BaseStorageBackend):
    method __init__ (line 100) | def __init__(self, server_list_cfg, client_cfg, sys_path=None):
    method get (line 117) | def get(self, filepath):
    method get_text (line 124) | def get_text(self, filepath):
  class LmdbBackend (line 128) | class LmdbBackend(BaseStorageBackend):
    method __init__ (line 146) | def __init__(self,
    method get (line 165) | def get(self, filepath):
    method get_text (line 176) | def get_text(self, filepath):
  class HardDiskBackend (line 180) | class HardDiskBackend(BaseStorageBackend):
    method get (line 183) | def get(self, filepath):
    method get_text (line 189) | def get_text(self, filepath):
  class FileClient (line 196) | class FileClient:
    method __init__ (line 217) | def __init__(self, backend='disk', **kwargs):
    method _register_backend (line 226) | def _register_backend(cls, name, backend, force=False):
    method register_backend (line 244) | def register_backend(cls, name, backend=None, force=False):
    method get (line 293) | def get(self, filepath):
    method get_text (line 296) | def get_text(self, filepath):

FILE: code/mmcv/mmcv/fileio/handlers/base.py
  class BaseFileHandler (line 5) | class BaseFileHandler(metaclass=ABCMeta):
    method load_from_fileobj (line 8) | def load_from_fileobj(self, file, **kwargs):
    method dump_to_fileobj (line 12) | def dump_to_fileobj(self, obj, file, **kwargs):
    method dump_to_str (line 16) | def dump_to_str(self, obj, **kwargs):
    method load_from_path (line 19) | def load_from_path(self, filepath, mode='r', **kwargs):
    method dump_to_path (line 23) | def dump_to_path(self, obj, filepath, mode='w', **kwargs):

FILE: code/mmcv/mmcv/fileio/handlers/json_handler.py
  class JsonHandler (line 7) | class JsonHandler(BaseFileHandler):
    method load_from_fileobj (line 9) | def load_from_fileobj(self, file):
    method dump_to_fileobj (line 12) | def dump_to_fileobj(self, obj, file, **kwargs):
    method dump_to_str (line 15) | def dump_to_str(self, obj, **kwargs):

FILE: code/mmcv/mmcv/fileio/handlers/pickle_handler.py
  class PickleHandler (line 7) | class PickleHandler(BaseFileHandler):
    method load_from_fileobj (line 9) | def load_from_fileobj(self, file, **kwargs):
    method load_from_path (line 12) | def load_from_path(self, filepath, **kwargs):
    method dump_to_str (line 16) | def dump_to_str(self, obj, **kwargs):
    method dump_to_fileobj (line 20) | def dump_to_fileobj(self, obj, file, **kwargs):
    method dump_to_path (line 24) | def dump_to_path(self, obj, filepath, **kwargs):

FILE: code/mmcv/mmcv/fileio/handlers/yaml_handler.py
  class YamlHandler (line 12) | class YamlHandler(BaseFileHandler):
    method load_from_fileobj (line 14) | def load_from_fileobj(self, file, **kwargs):
    method dump_to_fileobj (line 18) | def dump_to_fileobj(self, obj, file, **kwargs):
    method dump_to_str (line 22) | def dump_to_str(self, obj, **kwargs):

FILE: code/mmcv/mmcv/fileio/io.py
  function load (line 16) | def load(file, file_format=None, **kwargs):
  function dump (line 49) | def dump(obj, file=None, file_format=None, **kwargs):
  function _register_handler (line 87) | def _register_handler(handler, file_formats):
  function register_handler (line 106) | def register_handler(file_formats, **kwargs):

FILE: code/mmcv/mmcv/fileio/parse.py
  function list_from_file (line 2) | def list_from_file(filename, prefix='', offset=0, max_num=0):
  function dict_from_file (line 28) | def dict_from_file(filename, key_type=str):

FILE: code/mmcv/mmcv/image/colorspace.py
  function imconvert (line 6) | def imconvert(img, src, dst):
  function bgr2gray (line 22) | def bgr2gray(img, keepdim=False):
  function rgb2gray (line 39) | def rgb2gray(img, keepdim=False):
  function gray2bgr (line 56) | def gray2bgr(img):
  function gray2rgb (line 70) | def gray2rgb(img):
  function _convert_input_type_range (line 84) | def _convert_input_type_range(img):
  function _convert_output_type_range (line 112) | def _convert_output_type_range(img, dst_type):
  function rgb2ycbcr (line 143) | def rgb2ycbcr(img, y_only=False):
  function bgr2ycbcr (line 177) | def bgr2ycbcr(img, y_only=False):
  function ycbcr2rgb (line 211) | def ycbcr2rgb(img):
  function ycbcr2bgr (line 243) | def ycbcr2bgr(img):
  function convert_color_factory (line 275) | def convert_color_factory(src, dst):

FILE: code/mmcv/mmcv/image/geometric.py
  function _scale_size (line 6) | def _scale_size(size, scale):
  function imresize (line 29) | def imresize(img,
  function imresize_like (line 59) | def imresize_like(img, dst_img, return_scale=False, interpolation='bilin...
  function rescale_size (line 76) | def rescale_size(old_size, scale, return_scale=False):
  function imrescale (line 113) | def imrescale(img, scale, return_scale=False, interpolation='bilinear'):
  function imflip (line 138) | def imflip(img, direction='horizontal'):
  function imflip_ (line 155) | def imflip_(img, direction='horizontal'):
  function imrotate (line 172) | def imrotate(img,
  function bbox_clip (line 216) | def bbox_clip(bboxes, img_shape):
  function bbox_scaling (line 234) | def bbox_scaling(bboxes, scale, clip_shape=None):
  function imcrop (line 260) | def imcrop(img, bboxes, scale=1.0, pad_fill=None):
  function impad (line 314) | def impad(img, shape, pad_val=0):
  function impad_to_multiple (line 339) | def impad_to_multiple(img, divisor, pad_val=0):

FILE: code/mmcv/mmcv/image/io.py
  function use_backend (line 34) | def use_backend(backend):
  function _jpegflag (line 56) | def _jpegflag(flag='color', channel_order='bgr'):
  function _pillow2array (line 72) | def _pillow2array(img, flag='color', channel_order='bgr'):
  function imread (line 123) | def imread(img_or_path, flag='color', channel_order='bgr', backend=None):
  function imfrombytes (line 178) | def imfrombytes(content, flag='color', channel_order='bgr', backend=None):
  function imwrite (line 217) | def imwrite(img, file_path, params=None, auto_mkdir=True):

FILE: code/mmcv/mmcv/image/photometric.py
  function imnormalize (line 5) | def imnormalize(img, mean, std, to_rgb=True):
  function imnormalize_ (line 21) | def imnormalize_(img, mean, std, to_rgb=True):
  function imdenormalize (line 44) | def imdenormalize(img, mean, std, to_bgr=True):
  function iminvert (line 55) | def iminvert(img):
  function solarize (line 67) | def solarize(img, thr=128):
  function posterize (line 81) | def posterize(img, bits):

FILE: code/mmcv/mmcv/parallel/_functions.py
  function scatter (line 6) | def scatter(input, devices, streams=None):
  function synchronize_stream (line 30) | def synchronize_stream(output, devices, streams):
  function get_input_device (line 47) | def get_input_device(input):
  class Scatter (line 60) | class Scatter:
    method forward (line 63) | def forward(target_gpus, input):

FILE: code/mmcv/mmcv/parallel/collate.py
  function collate (line 11) | def collate(batch, samples_per_gpu=1):

FILE: code/mmcv/mmcv/parallel/data_container.py
  function assert_tensor_type (line 7) | def assert_tensor_type(func):
  class DataContainer (line 20) | class DataContainer:
    method __init__ (line 37) | def __init__(self,
    method __repr__ (line 50) | def __repr__(self):
    method __len__ (line 53) | def __len__(self):
    method data (line 57) | def data(self):
    method datatype (line 61) | def datatype(self):
    method cpu_only (line 68) | def cpu_only(self):
    method stack (line 72) | def stack(self):
    method padding_value (line 76) | def padding_value(self):
    method pad_dims (line 80) | def pad_dims(self):
    method size (line 84) | def size(self, *args, **kwargs):
    method dim (line 88) | def dim(self):

FILE: code/mmcv/mmcv/parallel/data_parallel.py
  class MMDataParallel (line 9) | class MMDataParallel(DataParallel):
    method scatter (line 11) | def scatter(self, inputs, kwargs, device_ids):
    method train_step (line 14) | def train_step(self, *inputs, **kwargs):
    method val_step (line 33) | def val_step(self, *inputs, **kwargs):

FILE: code/mmcv/mmcv/parallel/distributed.py
  class MMDistributedDataParallel (line 10) | class MMDistributedDataParallel(DistributedDataParallel):
    method scatter (line 20) | def scatter(self, inputs, kwargs, device_ids):
    method train_step (line 23) | def train_step(self, *inputs, **kwargs):
    method val_step (line 55) | def val_step(self, *inputs, **kwargs):

FILE: code/mmcv/mmcv/parallel/distributed_deprecated.py
  class MMDistributedDataParallel (line 14) | class MMDistributedDataParallel(nn.Module):
    method __init__ (line 16) | def __init__(self,
    method _dist_broadcast_coalesced (line 29) | def _dist_broadcast_coalesced(self, tensors, buffer_size):
    method _sync_params (line 37) | def _sync_params(self):
    method scatter (line 51) | def scatter(self, inputs, kwargs, device_ids):
    method forward (line 54) | def forward(self, *inputs, **kwargs):
    method train_step (line 59) | def train_step(self, *inputs, **kwargs):
    method val_step (line 65) | def val_step(self, *inputs, **kwargs):

FILE: code/mmcv/mmcv/parallel/scatter_gather.py
  function scatter (line 9) | def scatter(inputs, target_gpus, dim=0):
  function scatter_kwargs (line 45) | def scatter_kwargs(inputs, kwargs, target_gpus, dim=0):

FILE: code/mmcv/mmcv/parallel/utils.py
  function is_module_wrapper (line 5) | def is_module_wrapper(module):

FILE: code/mmcv/mmcv/runner/base_runner.py
  class BaseRunner (line 20) | class BaseRunner(metaclass=ABCMeta):
    method __init__ (line 48) | def __init__(self,
    method model_name (line 130) | def model_name(self):
    method rank (line 135) | def rank(self):
    method world_size (line 140) | def world_size(self):
    method hooks (line 146) | def hooks(self):
    method epoch (line 151) | def epoch(self):
    method iter (line 156) | def iter(self):
    method inner_iter (line 161) | def inner_iter(self):
    method max_epochs (line 166) | def max_epochs(self):
    method max_iters (line 171) | def max_iters(self):
    method train (line 176) | def train(self):
    method val (line 180) | def val(self):
    method run (line 184) | def run(self, data_loaders, workflow, **kwargs):
    method save_checkpoint (line 188) | def save_checkpoint(self,
    method current_lr (line 196) | def current_lr(self):
    method current_momentum (line 215) | def current_momentum(self):
    method register_hook (line 246) | def register_hook(self, hook, priority='NORMAL'):
    method call_hook (line 274) | def call_hook(self, fn_name):
    method load_checkpoint (line 284) | def load_checkpoint(self, filename, map_location='cpu', strict=False):
    method resume (line 289) | def resume(self,
    method register_lr_hook (line 309) | def register_lr_hook(self, lr_config):
    method register_momentum_hook (line 327) | def register_momentum_hook(self, momentum_config):
    method register_optimizer_hook (line 347) | def register_optimizer_hook(self, optimizer_config):
    method register_checkpoint_hook (line 357) | def register_checkpoint_hook(self, checkpoint_config):
    method register_logger_hooks (line 367) | def register_logger_hooks(self, log_config):
    method register_training_hooks (line 374) | def register_training_hooks(self,

FILE: code/mmcv/mmcv/runner/checkpoint.py
  function _get_mmcv_home (line 26) | def _get_mmcv_home():
  function load_state_dict (line 37) | def load_state_dict(module, state_dict, strict=False, logger=None):
  function load_url_dist (line 105) | def load_url_dist(url, model_dir=None):
  function get_torchvision_models (line 119) | def get_torchvision_models():
  function get_external_models (line 131) | def get_external_models():
  function get_deprecated_model_names (line 145) | def get_deprecated_model_names():
  function _load_checkpoint (line 154) | def _load_checkpoint(filename, map_location=None):
  function load_checkpoint (line 204) | def load_checkpoint(model,
  function weights_to_cpu (line 242) | def weights_to_cpu(state_dict):
  function save_checkpoint (line 257) | def save_checkpoint(model, filename, optimizer=None, meta=None):

FILE: code/mmcv/mmcv/runner/dist_utils.py
  function init_dist (line 13) | def init_dist(launcher, backend='nccl', **kwargs):
  function _init_dist_pytorch (line 26) | def _init_dist_pytorch(backend, **kwargs):
  function _init_dist_mpi (line 34) | def _init_dist_mpi(backend, **kwargs):
  function _init_dist_slurm (line 38) | def _init_dist_slurm(backend, port=None):
  function get_dist_info (line 70) | def get_dist_info():
  function master_only (line 87) | def master_only(func):

FILE: code/mmcv/mmcv/runner/epoch_based_runner.py
  class EpochBasedRunner (line 14) | class EpochBasedRunner(BaseRunner):
    method train (line 20) | def train(self, data_loader, **kwargs):
    method val (line 49) | def val(self, data_loader, **kwargs):
    method run (line 76) | def run(self, data_loaders, workflow, max_epochs, **kwargs):
    method save_checkpoint (line 127) | def save_checkpoint(self,
  class Runner (line 163) | class Runner(EpochBasedRunner):
    method __init__ (line 166) | def __init__(self, *args, **kwargs):

FILE: code/mmcv/mmcv/runner/hooks/checkpoint.py
  class CheckpointHook (line 9) | class CheckpointHook(Hook):
    method __init__ (line 29) | def __init__(self,
    method after_train_epoch (line 44) | def after_train_epoch(self, runner):
    method after_train_iter (line 67) | def after_train_iter(self, runner):

FILE: code/mmcv/mmcv/runner/hooks/closure.py
  class ClosureHook (line 6) | class ClosureHook(Hook):
    method __init__ (line 8) | def __init__(self, fn_name, fn):

FILE: code/mmcv/mmcv/runner/hooks/hook.py
  class Hook (line 7) | class Hook:
    method before_run (line 9) | def before_run(self, runner):
    method after_run (line 12) | def after_run(self, runner):
    method before_epoch (line 15) | def before_epoch(self, runner):
    method after_epoch (line 18) | def after_epoch(self, runner):
    method before_iter (line 21) | def before_iter(self, runner):
    method after_iter (line 24) | def after_iter(self, runner):
    method before_train_epoch (line 27) | def before_train_epoch(self, runner):
    method before_val_epoch (line 30) | def before_val_epoch(self, runner):
    method after_train_epoch (line 33) | def after_train_epoch(self, runner):
    method after_val_epoch (line 36) | def after_val_epoch(self, runner):
    method before_train_iter (line 39) | def before_train_iter(self, runner):
    method before_val_iter (line 42) | def before_val_iter(self, runner):
    method after_train_iter (line 45) | def after_train_iter(self, runner):
    method after_val_iter (line 48) | def after_val_iter(self, runner):
    method every_n_epochs (line 51) | def every_n_epochs(self, runner, n):
    method every_n_inner_iters (line 54) | def every_n_inner_iters(self, runner, n):
    method every_n_iters (line 57) | def every_n_iters(self, runner, n):
    method end_of_epoch (line 60) | def end_of_epoch(self, runner):

FILE: code/mmcv/mmcv/runner/hooks/iter_timer.py
  class IterTimerHook (line 8) | class IterTimerHook(Hook):
    method before_epoch (line 10) | def before_epoch(self, runner):
    method before_iter (line 13) | def before_iter(self, runner):
    method after_iter (line 16) | def after_iter(self, runner):

FILE: code/mmcv/mmcv/runner/hooks/logger/base.py
  class LoggerHook (line 7) | class LoggerHook(Hook):
    method __init__ (line 20) | def __init__(self,
    method log (line 31) | def log(self, runner):
    method before_run (line 34) | def before_run(self, runner):
    method before_epoch (line 40) | def before_epoch(self, runner):
    method after_train_iter (line 43) | def after_train_iter(self, runner):
    method after_train_epoch (line 57) | def after_train_epoch(self, runner):
    method after_val_epoch (line 63) | def after_val_epoch(self, runner):

FILE: code/mmcv/mmcv/runner/hooks/logger/mlflow.py
  class MlflowLoggerHook (line 10) | class MlflowLoggerHook(LoggerHook):
    method __init__ (line 12) | def __init__(self,
    method import_mlflow (line 47) | def import_mlflow(self):
    method before_run (line 58) | def before_run(self, runner):
    method log (line 65) | def log(self, runner):
    method after_run (line 78) | def after_run(self, runner):

FILE: code/mmcv/mmcv/runner/hooks/logger/pavi.py
  function is_scalar (line 13) | def is_scalar(val, include_np=True, include_torch=True):
  class PaviLoggerHook (line 35) | class PaviLoggerHook(LoggerHook):
    method __init__ (line 37) | def __init__(self,
    method before_run (line 52) | def before_run(self, runner):
    method log (line 71) | def log(self, runner):
    method after_run (line 96) | def after_run(self, runner):

FILE: code/mmcv/mmcv/runner/hooks/logger/tensorboard.py
  class TensorboardLoggerHook (line 11) | class TensorboardLoggerHook(LoggerHook):
    method __init__ (line 13) | def __init__(self,
    method before_run (line 24) | def before_run(self, runner):
    method log (line 45) | def log(self, runner):
    method after_run (line 74) | def after_run(self, runner):

FILE: code/mmcv/mmcv/runner/hooks/logger/text.py
  class TextLoggerHook (line 15) | class TextLoggerHook(LoggerHook):
    method __init__ (line 32) | def __init__(self,
    method before_run (line 44) | def before_run(self, runner):
    method _get_max_memory (line 52) | def _get_max_memory(self, runner):
    method _log_info (line 61) | def _log_info(self, log_dict, runner):
    method _dump_log (line 123) | def _dump_log(self, log_dict, runner):
    method _round_float (line 134) | def _round_float(self, items):
    method log (line 142) | def log(self, runner):

FILE: code/mmcv/mmcv/runner/hooks/logger/wandb.py
  class WandbLoggerHook (line 10) | class WandbLoggerHook(LoggerHook):
    method __init__ (line 12) | def __init__(self,
    method import_wandb (line 22) | def import_wandb(self):
    method before_run (line 31) | def before_run(self, runner):
    method log (line 40) | def log(self, runner):
    method after_run (line 54) | def after_run(self, runner):

FILE: code/mmcv/mmcv/runner/hooks/lr_updater.py
  class LrUpdaterHook (line 7) | class LrUpdaterHook(Hook):
    method __init__ (line 23) | def __init__(self,
    method _set_lr (line 56) | def _set_lr(self, runner, lr_groups):
    method get_lr (line 66) | def get_lr(self, runner, base_lr):
    method get_regular_lr (line 69) | def get_regular_lr(self, runner):
    method get_warmup_lr (line 83) | def get_warmup_lr(self, cur_iters):
    method before_run (line 94) | def before_run(self, runner):
    method before_train_epoch (line 113) | def before_train_epoch(self, runner):
    method before_train_iter (line 123) | def before_train_iter(self, runner):
  class FixedLrUpdaterHook (line 143) | class FixedLrUpdaterHook(LrUpdaterHook):
    method __init__ (line 145) | def __init__(self, **kwargs):
    method get_lr (line 148) | def get_lr(self, runner, base_lr):
  class StepLrUpdaterHook (line 153) | class StepLrUpdaterHook(LrUpdaterHook):
    method __init__ (line 155) | def __init__(self, step, gamma=0.1, **kwargs):
    method get_lr (line 168) | def get_lr(self, runner, base_lr):
  class ExpLrUpdaterHook (line 183) | class ExpLrUpdaterHook(LrUpdaterHook):
    method __init__ (line 185) | def __init__(self, gamma, **kwargs):
    method get_lr (line 189) | def get_lr(self, runner, base_lr):
  class PolyLrUpdaterHook (line 195) | class PolyLrUpdaterHook(LrUpdaterHook):
    method __init__ (line 197) | def __init__(self, power=1., min_lr=0., **kwargs):
    method get_lr (line 202) | def get_lr(self, runner, base_lr):
  class InvLrUpdaterHook (line 214) | class InvLrUpdaterHook(LrUpdaterHook):
    method __init__ (line 216) | def __init__(self, gamma, power=1., **kwargs):
    method get_lr (line 221) | def get_lr(self, runner, base_lr):
  class CosineAnealingLrUpdaterHook (line 227) | class CosineAnealingLrUpdaterHook(LrUpdaterHook):
    method __init__ (line 229) | def __init__(self, min_lr=None, min_lr_ratio=None, **kwargs):
    method get_lr (line 235) | def get_lr(self, runner, base_lr):
  class CosineRestartLrUpdaterHook (line 251) | class CosineRestartLrUpdaterHook(LrUpdaterHook):
    method __init__ (line 264) | def __init__(self,
    method get_lr (line 283) | def get_lr(self, runner, base_lr):
  function get_position_from_periods (line 303) | def get_position_from_periods(iteration, cumulative_periods):
  class CyclicLrUpdaterHook (line 327) | class CyclicLrUpdaterHook(LrUpdaterHook):
    method __init__ (line 347) | def __init__(self,
    method before_run (line 376) | def before_run(self, runner):
    method get_lr (line 389) | def get_lr(self, runner, base_lr):
  function annealing_cos (line 401) | def annealing_cos(start, end, factor, weight=1):

FILE: code/mmcv/mmcv/runner/hooks/memory.py
  class EmptyCacheHook (line 8) | class EmptyCacheHook(Hook):
    method __init__ (line 10) | def __init__(self, before_epoch=False, after_epoch=True, after_iter=Fa...
    method after_iter (line 15) | def after_iter(self, runner):
    method before_epoch (line 19) | def before_epoch(self, runner):
    method after_epoch (line 23) | def after_epoch(self, runner):

FILE: code/mmcv/mmcv/runner/hooks/momentum_updater.py
  class MomentumUpdaterHook (line 5) | class MomentumUpdaterHook(Hook):
    method __init__ (line 7) | def __init__(self,
    method _set_momentum (line 33) | def _set_momentum(self, runner, momentum_groups):
    method get_momentum (line 41) | def get_momentum(self, runner, base_momentum):
    method get_regular_momentum (line 44) | def get_regular_momentum(self, runner):
    method get_warmup_momentum (line 50) | def get_warmup_momentum(self, cur_iters):
    method before_run (line 66) | def before_run(self, runner):
    method before_train_epoch (line 80) | def before_train_epoch(self, runner):
    method before_train_iter (line 86) | def before_train_iter(self, runner):
  class CosineAnealingMomentumUpdaterHook (line 106) | class CosineAnealingMomentumUpdaterHook(MomentumUpdaterHook):
    method __init__ (line 108) | def __init__(self, min_momentum=None, min_momentum_ratio=None, **kwargs):
    method get_momentum (line 114) | def get_momentum(self, runner, base_momentum):
  class CyclicMomentumUpdaterHook (line 130) | class CyclicMomentumUpdaterHook(MomentumUpdaterHook):
    method __init__ (line 149) | def __init__(self,
    method before_run (line 178) | def before_run(self, runner):
    method get_momentum (line 191) | def get_momentum(self, runner, base_momentum):

FILE: code/mmcv/mmcv/runner/hooks/optimizer.py
  class OptimizerHook (line 8) | class OptimizerHook(Hook):
    method __init__ (line 10) | def __init__(self, grad_clip=None):
    method clip_grads (line 13) | def clip_grads(self, params):
    method after_train_iter (line 19) | def after_train_iter(self, runner):

FILE: code/mmcv/mmcv/runner/hooks/sampler_seed.py
  class DistSamplerSeedHook (line 6) | class DistSamplerSeedHook(Hook):
    method before_epoch (line 8) | def before_epoch(self, runner):

FILE: code/mmcv/mmcv/runner/iter_based_runner.py
  class IterLoader (line 15) | class IterLoader:
    method __init__ (line 17) | def __init__(self, dataloader):
    method epoch (line 23) | def epoch(self):
    method __next__ (line 26) | def __next__(self):
    method __len__ (line 38) | def __len__(self):
  class IterBasedRunner (line 42) | class IterBasedRunner(BaseRunner):
    method train (line 48) | def train(self, data_loader, **kwargs):
    method val (line 65) | def val(self, data_loader, **kwargs):
    method run (line 80) | def run(self, data_loaders, workflow, max_iters, **kwargs):
    method resume (line 125) | def resume(self,
    method save_checkpoint (line 160) | def save_checkpoint(self,
    method register_training_hooks (line 197) | def register_training_hooks(self,

FILE: code/mmcv/mmcv/runner/log_buffer.py
  class LogBuffer (line 7) | class LogBuffer:
    method __init__ (line 9) | def __init__(self):
    method clear (line 15) | def clear(self):
    method clear_output (line 20) | def clear_output(self):
    method update (line 24) | def update(self, vars, count=1):
    method average (line 33) | def average(self, n=0):

FILE: code/mmcv/mmcv/runner/optimizer/builder.py
  function register_torch_optimizers (line 12) | def register_torch_optimizers():
  function build_optimizer_constructor (line 28) | def build_optimizer_constructor(cfg):
  function build_optimizer (line 32) | def build_optimizer(model, cfg):

FILE: code/mmcv/mmcv/runner/optimizer/default_constructor.py
  class DefaultOptimizerConstructor (line 11) | class DefaultOptimizerConstructor:
    method __init__ (line 75) | def __init__(self, optimizer_cfg, paramwise_cfg=None):
    method _validate_cfg (line 85) | def _validate_cfg(self):
    method _is_in (line 108) | def _is_in(self, param_group, param_group_list):
    method add_params (line 117) | def add_params(self, params, module, prefix=''):
    method __call__ (line 191) | def __call__(self, model):

FILE: code/mmcv/mmcv/runner/priority.py
  class Priority (line 5) | class Priority(Enum):
  function get_priority (line 36) | def get_priority(priority):

FILE: code/mmcv/mmcv/runner/utils.py
  function get_host_info (line 10) | def get_host_info():
  function get_time_str (line 14) | def get_time_str():
  function obj_from_dict (line 18) | def obj_from_dict(info, parent=None, default_args=None):

FILE: code/mmcv/mmcv/utils/config.py
  class ConfigDict (line 21) | class ConfigDict(Dict):
    method __missing__ (line 23) | def __missing__(self, name):
    method __getattr__ (line 26) | def __getattr__(self, name):
  function add_args (line 39) | def add_args(parser, cfg, prefix=''):
  class Config (line 58) | class Config:
    method _validate_py_syntax (line 85) | def _validate_py_syntax(filename):
    method _file2dict (line 95) | def _file2dict(filename):
    method _merge_a_into_b (line 158) | def _merge_a_into_b(a, b):
    method fromfile (line 177) | def fromfile(filename):
    method auto_argparser (line 182) | def auto_argparser(description=None):
    method __init__ (line 194) | def __init__(self, cfg_dict=None, cfg_text=None, filename=None):
    method filename (line 216) | def filename(self):
    method text (line 220) | def text(self):
    method pretty_text (line 224) | def pretty_text(self):
    method __repr__ (line 317) | def __repr__(self):
    method __len__ (line 320) | def __len__(self):
    method __getattr__ (line 323) | def __getattr__(self, name):
    method __getitem__ (line 326) | def __getitem__(self, name):
    method __setattr__ (line 329) | def __setattr__(self, name, value):
    method __setitem__ (line 334) | def __setitem__(self, name, value):
    method __iter__ (line 339) | def __iter__(self):
    method dump (line 342) | def dump(self, file=None):
    method merge_from_dict (line 358) | def merge_from_dict(self, options):
  class DictAction (line 390) | class DictAction(Action):
    method _parse_int_float_bool (line 398) | def _parse_int_float_bool(val):
    method __call__ (line 411) | def __call__(self, parser, namespace, values, option_string=None):

FILE: code/mmcv/mmcv/utils/logging.py
  function get_logger (line 8) | def get_logger(name, log_file=None, log_level=logging.INFO):
  function print_log (line 68) | def print_log(msg, logger=None, level=logging.INFO):

FILE: code/mmcv/mmcv/utils/misc.py
  function is_str (line 9) | def is_str(x):
  function iter_cast (line 17) | def iter_cast(inputs, dst_type, return_type=None):
  function list_cast (line 42) | def list_cast(inputs, dst_type):
  function tuple_cast (line 50) | def tuple_cast(inputs, dst_type):
  function is_seq_of (line 58) | def is_seq_of(seq, expected_type, seq_type=None):
  function is_list_of (line 82) | def is_list_of(seq, expected_type):
  function is_tuple_of (line 90) | def is_tuple_of(seq, expected_type):
  function slice_list (line 98) | def slice_list(in_list, lens):
  function concat_list (line 124) | def concat_list(in_list):
  function check_prerequisites (line 136) | def check_prerequisites(
  function _check_py_package (line 174) | def _check_py_package(package):
  function _check_executable (line 183) | def _check_executable(cmd):
  function requires_package (line 190) | def requires_package(prerequisites):
  function requires_executable (line 206) | def requires_executable(prerequisites):

FILE: code/mmcv/mmcv/utils/parrots_wrapper.py
  function _get_cuda_home (line 8) | def _get_cuda_home():
  function get_build_config (line 16) | def get_build_config():
  function _get_conv (line 24) | def _get_conv():
  function _get_dataloader (line 32) | def _get_dataloader():
  function _get_extension (line 41) | def _get_extension():
  function _get_pool (line 52) | def _get_pool():
  function _get_norm (line 64) | def _get_norm():
  class SyncBatchNorm (line 83) | class SyncBatchNorm(SyncBatchNorm_):
    method _specify_ddp_gpu_num (line 85) | def _specify_ddp_gpu_num(self, gpu_size):
    method _check_input_dim (line 89) | def _check_input_dim(self, input):

FILE: code/mmcv/mmcv/utils/path.py
  function is_filepath (line 9) | def is_filepath(x):
  function fopen (line 13) | def fopen(filepath, *args, **kwargs):
  function check_file_exist (line 21) | def check_file_exist(filename, msg_tmpl='file "{}" does not exist'):
  function mkdir_or_exist (line 26) | def mkdir_or_exist(dir_name, mode=0o777):
  function symlink (line 33) | def symlink(src, dst, overwrite=True, **kwargs):
  function scandir (line 39) | def scandir(dir_path, suffix=None, recursive=False):
  function find_vcs_root (line 80) | def find_vcs_root(path, markers=('.git', )):

FILE: code/mmcv/mmcv/utils/progressbar.py
  class ProgressBar (line 10) | class ProgressBar:
    method __init__ (line 13) | def __init__(self, task_num=0, bar_width=50, start=True, file=sys.stdo...
    method terminal_width (line 22) | def terminal_width(self):
    method start (line 26) | def start(self):
    method update (line 35) | def update(self):
  function track_progress (line 63) | def track_progress(func, tasks, bar_width=50, file=sys.stdout, **kwargs):
  function init_pool (line 97) | def init_pool(process_num, initializer=None, initargs=None):
  function track_parallel_progress (line 108) | def track_parallel_progress(func,
  function track_iter_progress (line 178) | def track_iter_progress(tasks, bar_width=50, file=sys.stdout):

FILE: code/mmcv/mmcv/utils/registry.py
  class Registry (line 8) | class Registry:
    method __init__ (line 15) | def __init__(self, name):
    method __len__ (line 19) | def __len__(self):
    method __contains__ (line 22) | def __contains__(self, key):
    method __repr__ (line 25) | def __repr__(self):
    method name (line 32) | def name(self):
    method module_dict (line 36) | def module_dict(self):
    method get (line 39) | def get(self, key):
    method _register_module (line 50) | def _register_module(self, module_class, module_name=None, force=False):
    method deprecated_register_module (line 62) | def deprecated_register_module(self, cls=None, force=False):
    method register_module (line 72) | def register_module(self, name=None, force=False, module=None):
  function build_from_cfg (line 128) | def build_from_cfg(cfg, registry, default_args=None):

FILE: code/mmcv/mmcv/utils/timer.py
  class TimerError (line 5) | class TimerError(Exception):
    method __init__ (line 7) | def __init__(self, message):
  class Timer (line 12) | class Timer:
    method __init__ (line 38) | def __init__(self, start=True, print_tmpl=None):
    method is_running (line 45) | def is_running(self):
    method __enter__ (line 49) | def __enter__(self):
    method __exit__ (line 53) | def __exit__(self, type, value, traceback):
    method start (line 57) | def start(self):
    method since_start (line 64) | def since_start(self):
    method since_last_check (line 74) | def since_last_check(self):
  function check_time (line 92) | def check_time(timer_id):

FILE: code/mmcv/mmcv/video/io.py
  class Cache (line 14) | class Cache:
    method __init__ (line 16) | def __init__(self, capacity):
    method capacity (line 23) | def capacity(self):
    method size (line 27) | def size(self):
    method put (line 30) | def put(self, key, val):
    method get (line 37) | def get(self, key, default=None):
  class VideoReader (line 42) | class VideoReader:
    method __init__ (line 64) | def __init__(self, filename, cache_capacity=10):
    method vcap (line 78) | def vcap(self):
    method opened (line 83) | def opened(self):
    method width (line 88) | def width(self):
    method height (line 93) | def height(self):
    method resolution (line 98) | def resolution(self):
    method fps (line 103) | def fps(self):
    method frame_cnt (line 108) | def frame_cnt(self):
    method fourcc (line 113) | def fourcc(self):
    method position (line 118) | def position(self):
    method _get_real_position (line 122) | def _get_real_position(self):
    method _set_real_position (line 125) | def _set_real_position(self, frame_id):
    method read (line 132) | def read(self):
    method get_frame (line 158) | def get_frame(self, frame_id):
    method current_frame (line 185) | def current_frame(self):
    method cvt2frames (line 196) | def cvt2frames(self,
    method __len__ (line 241) | def __len__(self):
    method __getitem__ (line 244) | def __getitem__(self, index):
    method __iter__ (line 257) | def __iter__(self):
    method __next__ (line 261) | def __next__(self):
    method __enter__ (line 270) | def __enter__(self):
    method __exit__ (line 273) | def __exit__(self, exc_type, exc_value, traceback):
  function frames2video (line 277) | def frames2video(frame_dir,

FILE: code/mmcv/mmcv/video/optflow.py
  function flowread (line 10) | def flowread(flow_or_path, quantize=False, concat_axis=0, *args, **kwargs):
  function flowwrite (line 59) | def flowwrite(flow, filename, quantize=False, concat_axis=0, *args, **kw...
  function quantize_flow (line 89) | def quantize_flow(flow, max_val=0.02, norm=True):
  function dequantize_flow (line 117) | def dequantize_flow(dx, dy, max_val=0.02, denorm=True):
  function flow_warp (line 141) | def flow_warp(img, flow, filling_value=0, interpolate_mode='nearest'):

FILE: code/mmcv/mmcv/video/optflow_warp/flow_warp.cpp
  function FlowWarp (line 4) | void FlowWarp(double* img, double* flow, double* out, const int height,
  function BilinearInterpolate (line 34) | void BilinearInterpolate(const double* img, int width, int height, int c...
  function NNInterpolate (line 56) | void NNInterpolate(const double* img, int width, int height, int channels,

FILE: code/mmcv/mmcv/video/optflow_warp/flow_warp.hpp
  function T (line 18) | inline T __min__(T a, T b) {
  function T (line 23) | inline T __max__(T a, T b) {
  function T (line 28) | inline T EnforceRange(const T x, const int MaxValue) {

FILE: code/mmcv/mmcv/video/processing.py
  function convert_video (line 11) | def convert_video(in_file,
  function resize_video (line 55) | def resize_video(in_file,
  function cut_video (line 93) | def cut_video(in_file,
  function concat_video (line 128) | def concat_video(video_list,

FILE: code/mmcv/mmcv/visualization/color.py
  class Color (line 9) | class Color(Enum):
  function color_val (line 24) | def color_val(color):

FILE: code/mmcv/mmcv/visualization/image.py
  function imshow (line 30) | def imshow(img, win_name='', wait_time=0):
  function imshow_bboxes (line 51) | def imshow_bboxes(img,
  function imshow_det_bboxes (line 99) | def imshow_det_bboxes(img,
  function imshow_extremes (line 164) | def imshow_extremes(img,
  function imshow_polygons (line 226) | def imshow_polygons(img,
  function imshow_pose (line 276) | def imshow_pose(img,

FILE: code/mmcv/mmcv/visualization/optflow.py
  function flowshow (line 11) | def flowshow(flow, win_name='', wait_time=0):
  function flow2rgb (line 24) | def flow2rgb(flow, color_wheel=None, unknown_thr=1e6):
  function make_color_wheel (line 76) | def make_color_wheel(bins=None):

FILE: code/mmcv/setup.py
  function choose_requirement (line 12) | def choose_requirement(primary, secondary):
  function readme (line 25) | def readme():
  function get_version (line 31) | def get_version():
  function parse_requirements (line 38) | def parse_requirements(fname='requirements.txt', with_version=True):

FILE: code/mmcv/tests/test_arraymisc.py
  function test_quantize (line 10) | def test_quantize():
  function test_dequantize (line 35) | def test_dequantize():
  function test_joint (line 58) | def test_joint():

FILE: code/mmcv/tests/test_cnn/test_build_layers.py
  function test_build_conv_layer (line 15) | def test_build_conv_layer():
  function test_infer_abbr (line 59) | def test_infer_abbr():
  function test_build_norm_layer (line 96) | def test_build_norm_layer():
  function test_build_activation_layer (line 151) | def test_build_activation_layer():
  function test_build_padding_layer (line 174) | def test_build_padding_layer():
  function test_upsample_layer (line 202) | def test_upsample_layer():
  function test_pixel_shuffle_pack (line 258) | def test_pixel_shuffle_pack():
  function test_is_norm (line 266) | def test_is_norm():

FILE: code/mmcv/tests/test_cnn/test_conv_module.py
  class ExampleConv (line 11) | class ExampleConv(nn.Module):
    method __init__ (line 13) | def __init__(self,
    method forward (line 39) | def forward(self, x):
    method init_weights (line 43) | def init_weights(self):
  function test_conv_module (line 47) | def test_conv_module():
  function test_bias (line 139) | def test_bias():
  function conv_forward (line 160) | def conv_forward(self, x):
  function bn_forward (line 164) | def bn_forward(self, x):
  function relu_forward (line 168) | def relu_forward(self, x):
  function test_order (line 175) | def test_order():

FILE: code/mmcv/tests/test_cnn/test_flops_counter.py
  class ExampleModel (line 45) | class ExampleModel(nn.Module):
    method __init__ (line 47) | def __init__(self):
    method forward (line 51) | def forward(self, imgs):
  function input_constructor (line 56) | def input_constructor(x):
  function test_flops_counter (line 60) | def test_flops_counter():
  function test_flops_to_string (line 115) | def test_flops_to_string():
  function test_params_to_string (line 133) | def test_params_to_string():

FILE: code/mmcv/tests/test_cnn/test_hsigmoid.py
  function test_hsigmoid (line 6) | def test_hsigmoid():

FILE: code/mmcv/tests/test_cnn/test_hswish.py
  function test_hswish (line 7) | def test_hswish():

FILE: code/mmcv/tests/test_cnn/test_non_local.py
  function test_nonlocal (line 9) | def test_nonlocal():

FILE: code/mmcv/tests/test_cnn/test_scale.py
  function test_scale (line 6) | def test_scale():

FILE: code/mmcv/tests/test_cnn/test_weight_init.py
  function test_constant_init (line 11) | def test_constant_init():
  function test_xavier_init (line 23) | def test_xavier_init():
  function test_normal_init (line 35) | def test_normal_init():
  function test_uniform_init (line 45) | def test_uniform_init():
  function test_kaiming_init (line 54) | def test_kaiming_init():
  function test_caffe_xavier_init (line 66) | def test_caffe_xavier_init():
  function test_bias_init_with_prob (line 71) | def test_bias_init_with_prob():

FILE: code/mmcv/tests/test_config.py
  function test_construct (line 13) | def test_construct():
  function test_fromfile (line 64) | def test_fromfile():
  function test_merge_from_base (line 79) | def test_merge_from_base():
  function test_merge_from_multiple_bases (line 99) | def test_merge_from_multiple_bases():
  function test_merge_recursive_bases (line 117) | def test_merge_recursive_bases():
  function test_merge_from_dict (line 129) | def test_merge_from_dict():
  function test_merge_delete (line 138) | def test_merge_delete():
  function test_merge_intermediate_variable (line 149) | def test_merge_intermediate_variable():
  function test_fromfile_in_config (line 163) | def test_fromfile_in_config():
  function test_dict (line 174) | def test_dict():
  function test_setattr (line 219) | def test_setattr():
  function test_pretty_text (line 232) | def test_pretty_text():
  function test_dict_action (line 243) | def test_dict_action():
  function test_dump_mapping (line 259) | def test_dump_mapping():
  function test_reserved_key (line 271) | def test_reserved_key():
  function test_syntax_error (line 277) | def test_syntax_error():

FILE: code/mmcv/tests/test_fileclient.py
  class MockS3Client (line 16) | class MockS3Client:
    method __init__ (line 18) | def __init__(self, enable_mc=True):
    method Get (line 21) | def Get(self, filepath):
  class MockMemcachedClient (line 27) | class MockMemcachedClient:
    method __init__ (line 29) | def __init__(self, server_list_cfg, client_cfg):
    method Get (line 32) | def Get(self, filepath, buffer):
  class TestFileClient (line 37) | class TestFileClient:
    method setup_class (line 40) | def setup_class(cls):
    method test_error (line 46) | def test_error(self):
    method test_disk_backend (line 50) | def test_disk_backend(self):
    method test_ceph_backend (line 72) | def test_ceph_backend(self):
    method test_petrel_backend (line 110) | def test_petrel_backend(self):
    method test_memcached_backend (line 147) | def test_memcached_backend(self):
    method test_lmdb_backend (line 167) | def test_lmdb_backend(self):
    method test_register_backend (line 188) | def test_register_backend(self):

FILE: code/mmcv/tests/test_fileio.py
  function _test_handler (line 11) | def _test_handler(file_format, test_obj, str_checker, mode='r+'):
  function test_json (line 47) | def test_json():
  function test_yaml (line 57) | def test_yaml():
  function test_pickle (line 68) | def test_pickle():
  function test_exception (line 77) | def test_exception():
  function test_register_handler (line 87) | def test_register_handler():
  function test_list_from_file (line 124) | def test_list_from_file():
  function test_dict_from_file (line 138) | def test_dict_from_file():

FILE: code/mmcv/tests/test_image/test_colorspace.py
  function test_bgr2gray (line 12) | def test_bgr2gray():
  function test_rgb2gray (line 24) | def test_rgb2gray():
  function test_gray2bgr (line 36) | def test_gray2bgr():
  function test_gray2rgb (line 44) | def test_gray2rgb():
  function test_bgr2rgb (line 52) | def test_bgr2rgb():
  function test_rgb2bgr (line 61) | def test_rgb2bgr():
  function test_bgr2hsv (line 70) | def test_bgr2hsv():
  function test_convert_input_type_range (line 92) | def test_convert_input_type_range():
  function test_convert_output_type_range (line 109) | def test_convert_output_type_range():
  function test_rgb2ycbcr (line 126) | def test_rgb2ycbcr():
  function test_bgr2ycbcr (line 184) | def test_bgr2ycbcr():
  function test_ycbcr2rgb (line 238) | def test_ycbcr2rgb():
  function test_ycbcr2bgr (line 276) | def test_ycbcr2bgr():
  function test_bgr2hls (line 309) | def test_bgr2hls():
  function test_imconvert (line 347) | def test_imconvert(src, dst, ref):

FILE: code/mmcv/tests/test_image/test_geometric.py
  class TestGeometric (line 12) | class TestGeometric:
    method setup_class (line 15) | def setup_class(cls):
    method test_imresize (line 21) | def test_imresize(self):
    method test_imresize_like (line 38) | def test_imresize_like(self):
    method test_rescale_size (line 43) | def test_rescale_size(self):
    method test_imrescale (line 71) | def test_imrescale(self):
    method test_imflip (line 98) | def test_imflip(self):
    method test_imflip_ (line 130) | def test_imflip_(self):
    method test_imcrop (line 181) | def test_imcrop(self):
    method test_impad (line 223) | def test_impad(self):
    method test_impad_to_multiple (line 259) | def test_impad_to_multiple(self):
    method test_imrotate (line 270) | def test_imrotate(self):

FILE: code/mmcv/tests/test_image/test_io.py
  class TestIO (line 16) | class TestIO:
    method setup_class (line 19) | def setup_class(cls):
    method assert_img_equal (line 31) | def assert_img_equal(self, img, ref_img, ratio_thr=0.999):
    method test_imread (line 38) | def test_imread(self):
    method test_imfrombytes (line 177) | def test_imfrombytes(self):
    method test_imwrite (line 271) | def test_imwrite(self):
    method test_no_turbojpeg (line 284) | def test_no_turbojpeg(self):
    method test_no_pillow (line 291) | def test_no_pillow(self):

FILE: code/mmcv/tests/test_image/test_photometric.py
  class TestPhotometric (line 11) | class TestPhotometric:
    method setup_class (line 14) | def setup_class(cls):
    method test_imnormalize (line 21) | def test_imnormalize(self):
    method test_imnormalize_ (line 31) | def test_imnormalize_(self):
    method test_imdenormalize (line 43) | def test_imdenormalize(self):
    method test_iminvert (line 52) | def test_iminvert(self):
    method test_solarize (line 59) | def test_solarize(self):
    method test_posterize (line 69) | def test_posterize(self):

FILE: code/mmcv/tests/test_load_model_zoo.py
  function test_set_mmcv_home (line 17) | def test_set_mmcv_home():
  function test_default_mmcv_home (line 25) | def test_default_mmcv_home():
  function test_get_external_models (line 36) | def test_get_external_models():
  function test_get_deprecated_models (line 50) | def test_get_deprecated_models():
  function load_url_dist (line 61) | def load_url_dist(url):
  function load (line 65) | def load(filepath, map_location=None):
  function test_load_external_url (line 72) | def test_load_external_url():

FILE: code/mmcv/tests/test_logging.py
  function test_get_logger_rank0 (line 14) | def test_get_logger_rank0():
  function test_get_logger_rank1 (line 43) | def test_get_logger_rank1():
  function test_print_log_print (line 57) | def test_print_log_print(capsys):
  function test_print_log_silent (line 63) | def test_print_log_silent(capsys, caplog):
  function test_print_log_logger (line 70) | def test_print_log_logger(caplog):
  function test_print_log_exception (line 89) | def test_print_log_exception():

FILE: code/mmcv/tests/test_misc.py
  function test_iter_cast (line 7) | def test_iter_cast():
  function test_is_seq_of (line 19) | def test_is_seq_of():
  function test_slice_list (line 30) | def test_slice_list():
  function test_concat_list (line 40) | def test_concat_list():
  function test_requires_package (line 45) | def test_requires_package(capsys):
  function test_requires_executable (line 75) | def test_requires_executable(capsys):

FILE: code/mmcv/tests/test_optimizer.py
  class SubModel (line 12) | class SubModel(nn.Module):
    method __init__ (line 14) | def __init__(self):
    method forward (line 20) | def forward(self, x):
  class ExampleModel (line 24) | class ExampleModel(nn.Module):
    method __init__ (line 26) | def __init__(self):
    method forward (line 34) | def forward(self, x):
  class ExampleDuplicateModel (line 38) | class ExampleDuplicateModel(nn.Module):
    method __init__ (line 40) | def __init__(self):
    method forward (line 50) | def forward(self, x):
  class PseudoDataParallel (line 54) | class PseudoDataParallel(nn.Module):
    method __init__ (line 56) | def __init__(self):
    method forward (line 60) | def forward(self, x):
  function check_default_optimizer (line 69) | def check_default_optimizer(optimizer, model, prefix=''):
  function check_optimizer (line 87) | def check_optimizer(optimizer,
  function test_default_optimizer_constructor (line 152) | def test_default_optimizer_constructor():
  function test_torch_optimizers (line 494) | def test_torch_optimizers():
  function test_build_optimizer_constructor (line 502) | def test_build_optimizer_constructor():
  function test_build_optimizer (line 563) | def test_build_optimizer():

FILE: code/mmcv/tests/test_parallel.py
  function test_is_module_wrapper (line 15) | def test_is_module_wrapper():

FILE: code/mmcv/tests/test_path.py
  function test_is_filepath (line 10) | def test_is_filepath():
  function test_fopen (line 17) | def test_fopen():
  function test_check_file_exist (line 22) | def test_check_file_exist():
  function test_scandir (line 28) | def test_scandir():

FILE: code/mmcv/tests/test_progressbar.py
  function reset_string_io (line 18) | def reset_string_io(io):
  class TestProgressBar (line 23) | class TestProgressBar:
    method test_start (line 25) | def test_start(self):
    method test_update (line 49) | def test_update(self):
    method test_adaptive_length (line 67) | def test_adaptive_length(self):
  function sleep_1s (line 88) | def sleep_1s(num):
  function test_track_progress_list (line 93) | def test_track_progress_list():
  function test_track_progress_iterator (line 104) | def test_track_progress_iterator():
  function test_track_iter_progress (line 116) | def test_track_iter_progress():
  function test_track_enum_progress (line 129) | def test_track_enum_progress():
  function test_track_parallel_progress_list (line 146) | def test_track_parallel_progress_list():
  function test_track_parallel_progress_iterator (line 159) | def test_track_parallel_progress_iterator():

FILE: code/mmcv/tests/test_registry.py
  function test_registry (line 6) | def test_registry():
  function test_build_from_cfg (line 124) | def test_build_from_cfg():

FILE: code/mmcv/tests/test_runner/test_dist_utils.py
  function test_init_dist (line 13) | def test_init_dist(mock_getoutput, mock_dist_init, mock_set_device,

FILE: code/mmcv/tests/test_runner/test_hooks.py
  function test_pavi_hook (line 30) | def test_pavi_hook():
  function test_momentum_runner_hook (line 51) | def test_momentum_runner_hook():
  function test_cosine_runner_hook (line 101) | def test_cosine_runner_hook():
  function test_cosine_restart_lr_update_hook (line 148) | def test_cosine_restart_lr_update_hook():
  function test_mlflow_hook (line 227) | def test_mlflow_hook(log_model):
  function test_wandb_hook (line 252) | def test_wandb_hook():
  function _build_demo_runner (line 271) | def _build_demo_runner():

FILE: code/mmcv/tests/test_runner/test_runner.py
  class OldStyleModel (line 17) | class OldStyleModel(nn.Module):
    method __init__ (line 19) | def __init__(self):
  class Model (line 24) | class Model(OldStyleModel):
    method train_step (line 26) | def train_step(self):
    method val_step (line 29) | def val_step(self):
  function test_epoch_based_runner (line 33) | def test_epoch_based_runner():
  function test_runner_with_parallel (line 108) | def test_runner_with_parallel():
  function test_save_checkpoint (line 130) | def test_save_checkpoint():
  function test_build_lr_momentum_hook (line 147) | def test_build_lr_momentum_hook():

FILE: code/mmcv/tests/test_timer.py
  function test_timer_init (line 9) | def test_timer_init():
  function test_timer_run (line 18) | def test_timer_run():
  function test_timer_context (line 32) | def test_timer_context(capsys):

FILE: code/mmcv/tests/test_video/test_optflow.py
  function test_flowread (line 13) | def test_flowread():
  function test_flowwrite (line 50) | def test_flowwrite():
  function test_quantize_flow (line 75) | def test_quantize_flow():
  function test_dequantize_flow (line 102) | def test_dequantize_flow():
  function test_flow2rgb (line 126) | def test_flow2rgb():
  function test_flow_warp (line 142) | def test_flow_warp():
  function test_make_color_wheel (line 182) | def test_make_color_wheel():

FILE: code/mmcv/tests/test_video/test_processing.py
  class TestVideoEditor (line 9) | class TestVideoEditor:
    method setup_class (line 12) | def setup_class(cls):
    method test_cut_concat_video (line 16) | def test_cut_concat_video(self):
    method test_resize_video (line 34) | def test_resize_video(self):

FILE: code/mmcv/tests/test_video/test_reader.py
  class TestCache (line 13) | class TestCache:
    method test_init (line 15) | def test_init(self):
    method test_put (line 22) | def test_put(self):
    method test_get (line 34) | def test_get(self):
  class TestVideoReader (line 42) | class TestVideoReader:
    method setup_class (line 45) | def setup_class(cls):
    method test_load (line 49) | def test_load(self):
    method test_read (line 60) | def test_read(self):
    method test_slice (line 81) | def test_slice(self):
    method test_current_frame (line 108) | def test_current_frame(self):
    method test_position (line 115) | def test_position(self):
    method test_iterator (line 124) | def test_iterator(self):
    method test_with (line 131) | def test_with(self):
    method test_cvt2frames (line 136) | def test_cvt2frames(self):
    method test_frames2video (line 168) | def test_frames2video(self):

FILE: code/mmcv/tests/test_visualization.py
  function test_color (line 8) | def test_color():

FILE: code/mmdet/apis/inference.py
  function init_detector (line 15) | def init_detector(config, checkpoint=None, device='cuda:0'):
  class LoadImage (line 49) | class LoadImage(object):
    method __call__ (line 52) | def __call__(self, results):
  function inference_detector (line 76) | def inference_detector(model, img):
  function async_inference_detector (line 118) | async def async_inference_detector(model, img):
  function show_result_pyplot (line 146) | def show_result_pyplot(model, img, result, score_thr=0.3, fig_size=(15, ...

FILE: code/mmdet/apis/test.py
  function single_gpu_test (line 16) | def single_gpu_test(model,
  function multi_gpu_test (line 77) | def multi_gpu_test(model, data_loader, tmpdir=None, gpu_collect=False, b...
  function collect_results_cpu (line 135) | def collect_results_cpu(result_part, size, tmpdir=None):
  function collect_results_gpu (line 177) | def collect_results_gpu(result_part, size):

FILE: code/mmdet/apis/train.py
  function set_random_seed (line 14) | def set_random_seed(seed, deterministic=False):
  function train_detector (line 33) | def train_detector(model,

FILE: code/mmdet/core/anchor/anchor_generator.py
  class AnchorGenerator (line 10) | class AnchorGenerator(object):
    method __init__ (line 58) | def __init__(self,
    method num_base_anchors (line 113) | def num_base_anchors(self):
    method num_levels (line 118) | def num_levels(self):
    method gen_base_anchors (line 122) | def gen_base_anchors(self):
    method gen_single_level_base_anchors (line 142) | def gen_single_level_base_anchors(self,
    method _meshgrid (line 187) | def _meshgrid(self, x, y, row_major=True):
    method grid_anchors (line 206) | def grid_anchors(self, featmap_sizes, device='cuda'):
    method single_level_grid_anchors (line 232) | def single_level_grid_anchors(self,
    method valid_flags (line 269) | def valid_flags(self, featmap_sizes, pad_shape, device='cuda'):
    method single_level_valid_flags (line 296) | def single_level_valid_flags(self,
    method __repr__ (line 327) | def __repr__(self):
  class SSDAnchorGenerator (line 347) | class SSDAnchorGenerator(AnchorGenerator):
    method __init__ (line 363) | def __init__(self,
    method gen_base_anchors (line 432) | def gen_base_anchors(self):
    method __repr__ (line 453) | def __repr__(self):
  class LegacyAnchorGenerator (line 471) | class LegacyAnchorGenerator(AnchorGenerator):
    method gen_single_level_base_anchors (line 518) | def gen_single_level_base_anchors(self,
  class LegacySSDAnchorGenerator (line 569) | class LegacySSDAnchorGenerator(SSDAnchorGenerator, LegacyAnchorGenerator):
    method __init__ (line 576) | def __init__(self,

FILE: code/mmdet/core/anchor/builder.py
  function build_anchor_generator (line 6) | def build_anchor_generator(cfg, default_args=None):

FILE: code/mmdet/core/anchor/point_generator.py
  class PointGenerator (line 7) | class PointGenerator(object):
    method _meshgrid (line 9) | def _meshgrid(self, x, y, row_major=True):
    method grid_points (line 17) | def grid_points(self, featmap_size, stride=16, device='cuda'):
    method valid_flags (line 27) | def valid_flags(self, featmap_size, valid_size, device='cuda'):

FILE: code/mmdet/core/anchor/utils.py
  function images_to_levels (line 4) | def images_to_levels(target, num_levels):
  function anchor_inside_flags (line 20) | def anchor_inside_flags(flat_anchors,
  function calc_region (line 49) | def calc_region(bbox, ratio, featmap_size=None):

FILE: code/mmdet/core/bbox/assigners/approx_max_iou_assigner.py
  class ApproxMaxIoUAssigner (line 9) | class ApproxMaxIoUAssigner(MaxIoUAssigner):
    method __init__ (line 39) | def __init__(self,
    method assign (line 59) | def assign(self,

FILE: code/mmdet/core/bbox/assigners/assign_result.py
  class AssignResult (line 6) | class AssignResult(util_mixins.NiceRepr):
    method __init__ (line 43) | def __init__(self, num_gts, gt_inds, max_overlaps, labels=None):
    method num_preds (line 52) | def num_preds(self):
    method set_extra_property (line 56) | def set_extra_property(self, key, value):
    method get_extra_property (line 61) | def get_extra_property(self, key):
    method info (line 66) | def info(self):
    method __nice__ (line 78) | def __nice__(self):
    method random (line 98) | def random(cls, **kwargs):
    method add_gt_ (line 191) | def add_gt_(self, gt_labels):

FILE: code/mmdet/core/bbox/assigners/atss_assigner.py
  class ATSSAssigner (line 10) | class ATSSAssigner(BaseAssigner):
    method __init__ (line 23) | def __init__(self, topk, iou_calculator=dict(type='BboxOverlaps2D')):
    method assign (line 29) | def assign(self,

FILE: code/mmdet/core/bbox/assigners/base_assigner.py
  class BaseAssigner (line 4) | class BaseAssigner(metaclass=ABCMeta):
    method assign (line 8) | def assign(self, bboxes, gt_bboxes, gt_bboxes_ignore=None, gt_labels=N...

FILE: code/mmdet/core/bbox/assigners/center_region_assigner.py
  function scale_boxes (line 9) | def scale_boxes(bboxes, scale):
  function is_located_in (line 36) | def is_located_in(points, bboxes):
  function bboxes_area (line 54) | def bboxes_area(bboxes):
  class CenterRegionAssigner (line 72) | class CenterRegionAssigner(BaseAssigner):
    method __init__ (line 91) | def __init__(self,
    method get_gt_priorities (line 103) | def get_gt_priorities(self, gt_bboxes):
    method assign (line 121) | def assign(self, bboxes, gt_bboxes, gt_bboxes_ignore=None, gt_labels=N...
    method assign_one_hot_gt_indices (line 247) | def assign_one_hot_gt_indices(self,

FILE: code/mmdet/core/bbox/assigners/centroid_assigner.py
  class CentroidAssigner (line 10) | class CentroidAssigner(BaseAssigner):
    method __init__ (line 21) | def __init__(self, scale=4, pos_num=3, iou_type='center'):
    method assign (line 26) | def assign(self, points, gt_bboxes, gt_extreme_pts, gt_bboxes_ignore=N...
    method gen_centroid (line 95) | def gen_centroid(self, pts, num_gts):

FILE: code/mmdet/core/bbox/assigners/fcos_assigner.py
  class FCOSAssigner (line 10) | class FCOSAssigner(BaseAssigner):
    method __init__ (line 21) | def __init__(self, strides=[8, 16, 32, 64, 128],
    method assign (line 31) | def assign(self, points, num_points_per_lvl, gt_bboxes, gt_bboxes_igno...

FILE: code/mmdet/core/bbox/assigners/max_iou_assigner.py
  class MaxIoUAssigner (line 10) | class MaxIoUAssigner(BaseAssigner):
    method __init__ (line 40) | def __init__(self,
    method assign (line 60) | def assign(self, bboxes, gt_bboxes, gt_bboxes_ignore=None, gt_labels=N...
    method assign_wrt_overlaps (line 127) | def assign_wrt_overlaps(self, overlaps, gt_labels=None):

FILE: code/mmdet/core/bbox/assigners/point_assigner.py
  class PointAssigner (line 9) | class PointAssigner(BaseAssigner):
    method __init__ (line 20) | def __init__(self, scale=4, pos_num=3):
    method assign (line 24) | def assign(self, points, gt_bboxes, gt_bboxes_ignore=None, gt_labels=N...

FILE: code/mmdet/core/bbox/assigners/point_assigner_v2.py
  class PointAssignerV2 (line 9) | class PointAssignerV2(BaseAssigner):
    method __init__ (line 20) | def __init__(self, scale=4, pos_num=3):
    method assign (line 24) | def assign(self, points, gt_bboxes, gt_bboxes_ignore=None, gt_labels=N...

FILE: code/mmdet/core/bbox/assigners/point_ct_assigner.py
  class PointCTAssigner (line 13) | class PointCTAssigner(BaseAssigner):
    method assign (line 23) | def assign(self, points, gt_bboxes, gt_contours, sizes):

FILE: code/mmdet/core/bbox/assigners/point_hm_assigner.py
  class PointHMAssigner (line 9) | class PointHMAssigner(BaseAssigner):
    method __init__ (line 20) | def __init__(self, gaussian_bump=False, gaussian_iou=0.7):
    method assign (line 24) | def assign(self, points, gt_bboxes, gt_labels=None):
  function gaussian_radius (line 145) | def gaussian_radius(det_size, min_overlap):

FILE: code/mmdet/core/bbox/builder.py
  function build_assigner (line 8) | def build_assigner(cfg, **default_args):
  function build_sampler (line 13) | def build_sampler(cfg, **default_args):
  function build_bbox_coder (line 18) | def build_bbox_coder(cfg, **default_args):

FILE: code/mmdet/core/bbox/coder/base_bbox_coder.py
  class BaseBBoxCoder (line 4) | class BaseBBoxCoder(metaclass=ABCMeta):
    method __init__ (line 7) | def __init__(self, **kwargs):
    method encode (line 11) | def encode(self, bboxes, gt_bboxes):
    method decode (line 16) | def decode(self, bboxes, bboxes_pred):

FILE: code/mmdet/core/bbox/coder/delta_xywh_bbox_coder.py
  class DeltaXYWHBBoxCoder (line 9) | class DeltaXYWHBBoxCoder(BaseBBoxCoder):
    method __init__ (line 23) | def __init__(self,
    method encode (line 30) | def encode(self, bboxes, gt_bboxes):
    method decode (line 48) | def decode(self,
  function bbox2delta (line 74) | def bbox2delta(proposals, gt, means=(0., 0., 0., 0.), stds=(1., 1., 1., ...
  function delta2bbox (line 120) | def delta2bbox(rois,

FILE: code/mmdet/core/bbox/coder/legacy_delta_xywh_bbox_coder.py
  class LegacyDeltaXYWHBBoxCoder (line 9) | class LegacyDeltaXYWHBBoxCoder(BaseBBoxCoder):
    method __init__ (line 32) | def __init__(self,
    method encode (line 39) | def encode(self, bboxes, gt_bboxes):
    method decode (line 57) | def decode(self,
  function legacy_bbox2delta (line 82) | def legacy_bbox2delta(proposals,
  function legacy_delta2bbox (line 131) | def legacy_delta2bbox(rois,

FILE: code/mmdet/core/bbox/coder/pseudo_bbox_coder.py
  class PseudoBBoxCoder (line 6) | class PseudoBBoxCoder(BaseBBoxCoder):
    method __init__ (line 9) | def __init__(self, **kwargs):
    method encode (line 12) | def encode(self, bboxes, gt_bboxes):
    method decode (line 16) | def decode(self, bboxes, pred_bboxes):

FILE: code/mmdet/core/bbox/coder/tblr_bbox_coder.py
  class TBLRBBoxCoder (line 8) | class TBLRBBoxCoder(BaseBBoxCoder):
    method __init__ (line 22) | def __init__(self, normalizer=4.0):
    method encode (line 26) | def encode(self, bboxes, gt_bboxes):
    method decode (line 45) | def decode(self, bboxes, pred_bboxes, max_shape=None):
  function bboxes2tblr (line 67) | def bboxes2tblr(priors, gts, normalizer=4.0, normalize_by_wh=True):
  function tblr2bboxes (line 113) | def tblr2bboxes(priors,

FILE: code/mmdet/core/bbox/demodata.py
  function ensure_rng (line 5) | def ensure_rng(rng=None):
  function random_boxes (line 30) | def random_boxes(num=1, scale=1, rng=None):

FILE: code/mmdet/core/bbox/iou_calculators/builder.py
  function build_iou_calculator (line 6) | def build_iou_calculator(cfg, default_args=None):

FILE: code/mmdet/core/bbox/iou_calculators/iou2d_calculator.py
  class BboxOverlaps2D (line 7) | class BboxOverlaps2D(object):
    method __call__ (line 10) | def __call__(self, bboxes1, bboxes2, mode='iou', is_aligned=False):
    method __repr__ (line 33) | def __repr__(self):
  function bbox_overlaps (line 39) | def bbox_overlaps(bboxes1, bboxes2, mode='iou', is_aligned=False, eps=1e...

FILE: code/mmdet/core/bbox/samplers/base_sampler.py
  class BaseSampler (line 8) | class BaseSampler(metaclass=ABCMeta):
    method __init__ (line 11) | def __init__(self,
    method _sample_pos (line 25) | def _sample_pos(self, assign_result, num_expected, **kwargs):
    method _sample_neg (line 30) | def _sample_neg(self, assign_result, num_expected, **kwargs):
    method sample (line 34) | def sample(self,

FILE: code/mmdet/core/bbox/samplers/combined_sampler.py
  class CombinedSampler (line 6) | class CombinedSampler(BaseSampler):
    method __init__ (line 9) | def __init__(self, pos_sampler, neg_sampler, **kwargs):
    method _sample_pos (line 14) | def _sample_pos(self, **kwargs):
    method _sample_neg (line 18) | def _sample_neg(self, **kwargs):

FILE: code/mmdet/core/bbox/samplers/instance_balanced_pos_sampler.py
  class InstanceBalancedPosSampler (line 9) | class InstanceBalancedPosSampler(RandomSampler):
    method _sample_pos (line 13) | def _sample_pos(self, assign_result, num_expected, **kwargs):

FILE: code/mmdet/core/bbox/samplers/iou_balanced_neg_sampler.py
  class IoUBalancedNegSampler (line 9) | class IoUBalancedNegSampler(RandomSampler):
    method __init__ (line 29) | def __init__(self,
    method sample_via_interval (line 46) | def sample_via_interval(self, max_overlaps, full_set, num_expected):
    method _sample_neg (line 88) | def _sample_neg(self, assign_result, num_expected, **kwargs):

FILE: code/mmdet/core/bbox/samplers/ohem_sampler.py
  class OHEMSampler (line 9) | class OHEMSampler(BaseSampler):
    method __init__ (line 17) | def __init__(self,
    method hard_mining (line 34) | def hard_mining(self, inds, num_expected, bboxes, labels, feats):
    method _sample_pos (line 52) | def _sample_pos(self,
    method _sample_neg (line 80) | def _sample_neg(self,

FILE: code/mmdet/core/bbox/samplers/pseudo_sampler.py
  class PseudoSampler (line 9) | class PseudoSampler(BaseSampler):
    method __init__ (line 12) | def __init__(self, **kwargs):
    method _sample_pos (line 15) | def _sample_pos(self, **kwargs):
    method _sample_neg (line 19) | def _sample_neg(self, **kwargs):
    method sample (line 23) | def sample(self, assign_result, bboxes, gt_bboxes, **kwargs):

FILE: code/mmdet/core/bbox/samplers/random_sampler.py
  class RandomSampler (line 8) | class RandomSampler(BaseSampler):
    method __init__ (line 20) | def __init__(self,
    method random_choice (line 31) | def random_choice(self, gallery, num):
    method _sample_pos (line 57) | def _sample_pos(self, assign_result, num_expected, **kwargs):
    method _sample_neg (line 67) | def _sample_neg(self, assign_result, num_expected, **kwargs):

FILE: code/mmdet/core/bbox/samplers/sampling_result.py
  class SamplingResult (line 6) | class SamplingResult(util_mixins.NiceRepr):
    method __init__ (line 25) | def __init__(self, pos_inds, neg_inds, bboxes, gt_bboxes, assign_result,
    method bboxes (line 52) | def bboxes(self):
    method to (line 56) | def to(self, device):
    method __nice__ (line 71) | def __nice__(self):
    method info (line 80) | def info(self):
    method random (line 93) | def random(cls, rng=None, **kwargs):

FILE: code/mmdet/core/bbox/samplers/score_hlr_sampler.py
  class ScoreHLRSampler (line 11) | class ScoreHLRSampler(BaseSampler):
    method __init__ (line 35) | def __init__(self,
    method random_choice (line 65) | def random_choice(gallery, num):
    method _sample_pos (line 91) | def _sample_pos(self, assign_result, num_expected, **kwargs):
    method _sample_neg (line 99) | def _sample_neg(self,
    method sample (line 215) | def sample(self,

FILE: code/mmdet/core/bbox/transforms.py
  function bbox_flip (line 5) | def bbox_flip(bboxes, img_shape, direction='horizontal'):
  function polygon_flip (line 30) | def polygon_flip(polygons, img_shape, direction='horizontal'):
  function extreme_flip (line 48) | def extreme_flip(extremes, img_shape, direction='horizontal'):
  function kps_flip (line 69) | def kps_flip(kps, img_shape, direction='horizontal'):
  function bbox_mapping (line 91) | def bbox_mapping(bboxes,
  function bbox_mapping_back (line 103) | def bbox_mapping_back(bboxes,
  function instance_mapping_back (line 115) | def instance_mapping_back(bboxes,
  function bbox2roi (line 139) | def bbox2roi(bbox_list):
  function roi2bbox (line 161) | def roi2bbox(rois):
  function bbox2result (line 180) | def bbox2result(bboxes, labels, num_classes):
  function bbox_extreme2result (line 198) | def bbox_extreme2result(bboxes, extremes, labels, num_classes):
  function bbox_poly2result (line 209) | def bbox_poly2result(bboxes, polygons, labels, num_classes, num_contour_...
  function distance2bbox (line 221) | def distance2bbox(points, distance, max_shape=None):
  function bbox2distance (line 245) | def bbox2distance(points, bbox, max_dis=None, eps=0.1):

FILE: code/mmdet/core/evaluation/bbox_overlaps.py
  function bbox_overlaps (line 4) | def bbox_overlaps(bboxes1, bboxes2, mode='iou', eps=1e-6):

FILE: code/mmdet/core/evaluation/class_names.py
  function wider_face_classes (line 4) | def wider_face_classes():
  function voc_classes (line 8) | def voc_classes():
  function imagenet_det_classes (line 16) | def imagenet_det_classes():
  function imagenet_vid_classes (line 57) | def imagenet_vid_classes():
  function coco_classes (line 67) | def coco_classes():
  function cityscapes_classes (line 85) | def cityscapes_classes():
  function get_classes (line 102) | def get_classes(dataset):

FILE: code/mmdet/core/evaluation/eval_hooks.py
  class EvalHook (line 7) | class EvalHook(Hook):
    method __init__ (line 15) | def __init__(self, dataloader, interval=1, bbox_head=None, **eval_kwar...
    method after_train_epoch (line 24) | def after_train_epoch(self, runner):
    method evaluate (line 32) | def evaluate(self, runner, results):
  class DistEvalHook (line 40) | class DistEvalHook(EvalHook):
    method __init__ (line 52) | def __init__(self,
    method after_train_epoch (line 67) | def after_train_epoch(self, runner):

FILE: code/mmdet/core/evaluation/mean_ap.py
  function average_precision (line 12) | def average_precision(recalls, precisions, mode='area'):
  function tpfp_imagenet (line 59) | def tpfp_imagenet(det_bboxes,
  function tpfp_default (line 153) | def tpfp_default(det_bboxes,
  function get_cls_results (line 240) | def get_cls_results(det_results, annotations, class_id):
  function eval_map (line 267) | def eval_map(det_results,
  function print_map_summary (line 393) | def print_map_summary(mean_ap,

FILE: code/mmdet/core/evaluation/recall.py
  function _recalls (line 10) | def _recalls(all_ious, proposal_nums, thrs):
  function set_recall_param (line 43) | def set_recall_param(proposal_nums, iou_thrs):
  function eval_recalls (line 65) | def eval_recalls(gts,
  function print_recall_summary (line 110) | def print_recall_summary(recalls,
  function plot_num_recall (line 143) | def plot_num_recall(recalls, proposal_nums):
  function plot_iou_recall (line 168) | def plot_iou_recall(recalls, iou_thrs):

FILE: code/mmdet/core/fp16/decorators.py
  function auto_fp16 (line 9) | def auto_fp16(apply_to=None, out_fp32=False):
  function force_fp32 (line 88) | def force_fp32(apply_to=None, out_fp16=False):

FILE: code/mmdet/core/fp16/hooks.py
  class Fp16OptimizerHook (line 11) | class Fp16OptimizerHook(OptimizerHook):
    method __init__ (line 27) | def __init__(self,
    method before_run (line 39) | def before_run(self, runner):
    method copy_grads_to_fp32 (line 51) | def copy_grads_to_fp32(self, fp16_net, fp32_weights):
    method copy_params_to_fp16 (line 59) | def copy_params_to_fp16(self, fp16_net, fp32_weights):
    method after_train_iter (line 64) | def after_train_iter(self, runner):
  function wrap_fp16_model (line 99) | def wrap_fp16_model(model):
  function patch_norm_fp32 (line 118) | def patch_norm_fp32(module):
  function patch_forward_method (line 138) | def patch_forward_method(func, src_type, dst_type, convert_output=True):

FILE: code/mmdet/core/fp16/utils.py
  function cast_tensor_type (line 7) | def cast_tensor_type(inputs, src_type, dst_type):

FILE: code/mmdet/core/mask/mask_target.py
  function mask_target (line 6) | def mask_target(pos_proposals_list, pos_assigned_gt_inds_list, gt_masks_...
  function mask_target_single (line 31) | def mask_target_single(pos_proposals, pos_assigned_gt_inds, gt_masks, cfg):

FILE: code/mmdet/core/mask/structures.py
  class BaseInstanceMasks (line 11) | class BaseInstanceMasks(metaclass=ABCMeta):
    method rescale (line 14) | def rescale(self, scale, interpolation='nearest'):
    method resize (line 28) | def resize(self, out_shape, interpolation='nearest'):
    method flip (line 41) | def flip(self, flip_direction='horizontal'):
    method pad (line 53) | def pad(self, out_shape, pad_val):
    method crop (line 66) | def crop(self, bbox):
    method crop_and_resize (line 78) | def crop_and_resize(self,
    method expand (line 103) | def expand(self, expanded_h, expanded_w, top, left):
    method areas (line 109) | def areas(self):
    method to_ndarray (line 114) | def to_ndarray(self):
    method to_tensor (line 123) | def to_tensor(self, dtype, device):
  class BitmapMasks (line 136) | class BitmapMasks(BaseInstanceMasks):
    method __init__ (line 146) | def __init__(self, masks, height, width):
    method __getitem__ (line 163) | def __getitem__(self, index):
    method __iter__ (line 176) | def __iter__(self):
    method __repr__ (line 179) | def __repr__(self):
    method __len__ (line 186) | def __len__(self):
    method rescale (line 190) | def rescale(self, scale, interpolation='nearest'):
    method resize (line 203) | def resize(self, out_shape, interpolation='nearest'):
    method flip (line 214) | def flip(self, flip_direction='horizontal'):
    method pad (line 227) | def pad(self, out_shape, pad_val=0):
    method crop (line 238) | def crop(self, bbox):
    method crop_and_resize (line 257) | def crop_and_resize(self,
    method expand (line 289) | def expand(self, expanded_h, expanded_w, top, left):
    method areas (line 302) | def areas(self):
    method to_ndarray (line 306) | def to_ndarray(self):
    method to_tensor (line 310) | def to_tensor(self, dtype, device):
  class PolygonMasks (line 315) | class PolygonMasks(BaseInstanceMasks):
    method __init__ (line 330) | def __init__(self, masks, height, width):
    method __getitem__ (line 340) | def __getitem__(self, index):
    method __iter__ (line 363) | def __iter__(self):
    method __repr__ (line 366) | def __repr__(self):
    method __len__ (line 373) | def __len__(self):
    method rescale (line 377) | def rescale(self, scale, interpolation=None):
    method resize (line 386) | def resize(self, out_shape, interpolation=None):
    method flip (line 405) | def flip(self, flip_direction='horizontal', keep_cw=False):
    method crop (line 435) | def crop(self, bbox):
    method pad (line 464) | def pad(self, out_shape, pad_val=0):
    method expand (line 468) | def expand(self, *args, **kwargs):
    method crop_and_resize (line 472) | def crop_and_resize(self,
    method to_bitmap (line 508) | def to_bitmap(self):
    method areas (line 514) | def areas(self):
    method _polygon_area (line 532) | def _polygon_area(self, x, y):
    method to_ndarray (line 548) | def to_ndarray(self):
    method to_tensor (line 558) | def to_tensor(self, dtype, device):
  function polygon_to_bitmap (line 568) | def polygon_to_bitmap(polygons, height, width):

FILE: code/mmdet/core/mask/utils.py
  function split_combined_polys (line 6) | def split_combined_polys(polys, poly_lens, polys_per_mask):
  function encode_mask_results (line 36) | def encode_mask_results(mask_results):
  function get_rle (line 65) | def get_rle(cls_segm, img_h, img_w):
  function encode_poly_results (line 70) | def encode_poly_results(mask_results, img_h, img_w):

FILE: code/mmdet/core/post_processing/bbox_nms.py
  function multiclass_nms (line 7) | def multiclass_nms(multi_bboxes,
  function multiclass_nms_lsvr (line 60) | def multiclass_nms_lsvr(multi_bboxes,
  function multiclass_nms_pts (line 102) | def multiclass_nms_pts(multi_bboxes,
  function multiclass_nms_pts_refine (line 167) | def multiclass_nms_pts_refine(multi_bboxes,

FILE: code/mmdet/core/post_processing/merge_augs.py
  function merge_aug_proposals (line 8) | def merge_aug_proposals(aug_proposals, img_metas, rpn_test_cfg):
  function merge_aug_bboxes (line 48) | def merge_aug_bboxes(aug_bboxes, aug_scores, img_metas, rcnn_test_cfg):
  function merge_aug_scores (line 77) | def merge_aug_scores(aug_scores):
  function merge_aug_masks (line 85) | def merge_aug_masks(aug_masks, img_metas, rcnn_test_cfg, weights=None):

FILE: code/mmdet/core/utils/dist_utils.py
  function _allreduce_coalesced (line 10) | def _allreduce_coalesced(tensors, world_size, bucket_size_mb=-1):
  function allreduce_grads (line 32) | def allreduce_grads(params, coalesce=True, bucket_size_mb=-1):
  class DistOptimizerHook (line 54) | class DistOptimizerHook(OptimizerHook):
    method __init__ (line 57) | def __init__(self, *args, **kwargs):

FILE: code/mmdet/core/utils/misc.py
  function tensor2imgs (line 9) | def tensor2imgs(tensor, mean=(0, 0, 0), std=(1, 1, 1), to_rgb=True):
  function multi_apply (line 35) | def multi_apply(func, *args, **kwargs):
  function unmap (line 57) | def unmap(data, count, inds, fill=0):

FILE: code/mmdet/datasets/builder.py
  function _concat_dataset (line 26) | def _concat_dataset(cfg, default_args=None):
  function build_dataset (line 49) | def build_dataset(cfg, default_args=None):
  function build_dataloader (line 68) | def build_dataloader(dataset,
  function worker_init_fn (line 130) | def worker_init_fn(worker_id, num_workers, rank, seed):

FILE: code/mmdet/datasets/cityscapes.py
  class CityscapesDataset (line 19) | class CityscapesDataset(CocoDataset):
    method _filter_imgs (line 24) | def _filter_imgs(self, min_size=32):
    method _parse_ann_info (line 40) | def _parse_ann_info(self, img_info, ann_info):
    method results2txt (line 94) | def results2txt(self, results, outfile_prefix):
    method format_results (line 160) | def format_results(self, results, txtfile_prefix=None):
    method evaluate (line 193) | def evaluate(self,
    method _evaluate_cityscapes (line 260) | def _evaluate_cityscapes(self, results, txtfile_prefix, logger):

FILE: code/mmdet/datasets/coco.py
  class CocoDataset (line 19) | class CocoDataset(CustomDataset):
    method load_annotations (line 36) | def load_annotations(self, ann_file):
    method get_ann_info (line 57) | def get_ann_info(self, idx):
    method get_cat_ids (line 72) | def get_cat_ids(self, idx):
    method _filter_imgs (line 87) | def _filter_imgs(self, min_size=32):
    method get_subset_by_classes (line 98) | def get_subset_by_classes(self):
    method _parse_ann_info (line 123) | def _parse_ann_info(self, img_info, ann_info):
    method xyxy2xywh (line 188) | def xyxy2xywh(self, bbox):
    method _proposal2json (line 208) | def _proposal2json(self, results):
    method _det2json (line 223) | def _det2json(self, results):
    method _segm2json (line 240) | def _segm2json(self, results):
    method results2json (line 278) | def results2json(self, results, outfile_prefix):
    method fast_eval_recall (line 318) | def fast_eval_recall(self, results, proposal_nums, iou_thrs, logger=No...
    method format_results (line 342) | def format_results(self, results, jsonfile_prefix=None, **kwargs):
    method evaluate (line 370) | def evaluate(self,

FILE: code/mmdet/datasets/coco_pose.py
  class CocoPoseDataset (line 19) | class CocoPoseDataset(CustomDataset):
    method load_annotations (line 23) | def load_annotations(self, ann_file):
    method get_ann_info (line 44) | def get_ann_info(self, idx):
    method get_cat_ids (line 59) | def get_cat_ids(self, idx):
    method _filter_imgs (line 74) | def _filter_imgs(self, min_size=32):
    method get_subset_by_classes (line 85) | def get_subset_by_classes(self):
    method _parse_ann_info (line 110) | def _parse_ann_info(self, img_info, ann_info):
    method xyxy2xywh (line 174) | def xyxy2xywh(self, bbox):
    method _proposal2json (line 194) | def _proposal2json(self, results):
    method _det2json (line 209) | def _det2json(self, results):
    method _kps2json (line 226) | def _kps2json(self, results):
    method _segm2json (line 249) | def _segm2json(self, results):
    method results2json (line 287) | def results2json(self, results, outfile_prefix):
    method fast_eval_recall (line 331) | def fast_eval_recall(self, results, proposal_nums, iou_thrs, logger=No...
    method format_results (line 355) | def format_results(self, results, jsonfile_prefix=None, **kwargs):
    method evaluate (line 383) | def evaluate(self,

FILE: code/mmdet/datasets/custom.py
  class CustomDataset (line 13) | class CustomDataset(Dataset):
    method __init__ (line 50) | def __init__(self,
    method __len__ (line 103) | def __len__(self):
    method load_annotations (line 107) | def load_annotations(self, ann_file):
    method load_proposals (line 111) | def load_proposals(self, proposal_file):
    method get_ann_info (line 115) | def get_ann_info(self, idx):
    method get_cat_ids (line 127) | def get_cat_ids(self, idx):
    method pre_pipeline (line 139) | def pre_pipeline(self, results):
    method _filter_imgs (line 150) | def _filter_imgs(self, min_size=32):
    method _set_group_flag (line 158) | def _set_group_flag(self):
    method _rand_another (line 170) | def _rand_another(self, idx):
    method __getitem__ (line 175) | def __getitem__(self, idx):
    method prepare_train_img (line 195) | def prepare_train_img(self, idx):
    method prepare_test_img (line 214) | def prepare_test_img(self, idx):
    method get_classes (line 233) | def get_classes(cls, classes=None):
    method get_subset_by_classes (line 259) | def get_subset_by_classes(self):
    method format_results (line 262) | def format_results(self, results, **kwargs):
    method evaluate (line 266) | def evaluate(self,

FILE: code/mmdet/datasets/dataset_wrappers.py
  class ConcatDataset (line 12) | class ConcatDataset(_ConcatDataset):
    method __init__ (line 22) | def __init__(self, datasets):
    method get_cat_ids (line 31) | def get_cat_ids(self, idx):
  class RepeatDataset (line 55) | class RepeatDataset(object):
    method __init__ (line 68) | def __init__(self, dataset, times):
    method __getitem__ (line 77) | def __getitem__(self, idx):
    method get_cat_ids (line 80) | def get_cat_ids(self, idx):
    method __len__ (line 92) | def __len__(self):
  class ClassBalancedDataset (line 99) | class ClassBalancedDataset(object):
    method __init__ (line 131) | def __init__(self, dataset, oversample_thr):
    method _get_repeat_factors (line 149) | def _get_repeat_factors(self, dataset, repeat_thr):
    method __getitem__ (line 192) | def __getitem__(self, idx):
    method __len__ (line 196) | def __len__(self):

FILE: code/mmdet/datasets/deepfashion.py
  class DeepFashionDataset (line 6) | class DeepFashionDataset(CocoDataset):

FILE: code/mmdet/datasets/lvis.py
  class LVISDataset (line 15) | class LVISDataset(CocoDataset):
    method load_annotations (line 267) | def load_annotations(self, ann_file):
    method evaluate (line 301) | def evaluate(self,

FILE: code/mmdet/datasets/pipelines/auto_augment.py
  class AutoAugment (line 10) | class AutoAugment(object):
    method __init__ (line 51) | def __init__(self, policies):
    method __call__ (line 65) | def __call__(self, results):
    method __repr__ (line 69) | def __repr__(self):

FILE: code/mmdet/datasets/pipelines/compose.py
  class Compose (line 9) | class Compose(object):
    method __init__ (line 17) | def __init__(self, transforms):
    method __call__ (line 29) | def __call__(self, data):
    method __repr__ (line 45) | def __repr__(self):

FILE: code/mmdet/datasets/pipelines/formating.py
  function to_tensor (line 11) | def to_tensor(data):
  class ToTensor (line 37) | class ToTensor(object):
    method __init__ (line 44) | def __init__(self, keys):
    method __call__ (line 47) | def __call__(self, results):
    method __repr__ (line 61) | def __repr__(self):
  class ImageToTensor (line 66) | class ImageToTensor(object):
    method __init__ (line 77) | def __init__(self, keys):
    method __call__ (line 80) | def __call__(self, results):
    method __repr__ (line 98) | def __repr__(self):
  class Transpose (line 103) | class Transpose(object):
    method __init__ (line 111) | def __init__(self, keys, order):
    method __call__ (line 115) | def __call__(self, results):
    method __repr__ (line 129) | def __repr__(self):
  class ToDataContainer (line 135) | class ToDataContainer(object):
    method __init__ (line 146) | def __init__(self,
    method __call__ (line 151) | def __call__(self, results):
    method __repr__ (line 169) | def __repr__(self):
  class DefaultFormatBundle (line 174) | class DefaultFormatBundle(object):
    method __call__ (line 191) | def __call__(self, results):
    method _add_default_meta_keys (line 221) | def _add_default_meta_keys(self, results):
    method __repr__ (line 246) | def __repr__(self):
  class Collect (line 251) | class Collect(object):
    method __init__ (line 290) | def __init__(self,
    method __call__ (line 298) | def __call__(self, results):
    method __repr__ (line 320) | def __repr__(self):
  class WrapFieldsToLists (line 326) | class WrapFieldsToLists(object):
    method __call__ (line 347) | def __call__(self, results):
    method __repr__ (line 363) | def __repr__(self):

FILE: code/mmdet/datasets/pipelines/formating_reppointsv2.py
  class RPDV2FormatBundle (line 13) | class RPDV2FormatBundle(object):
    method __init__ (line 30) | def __init__(self):
    method __call__ (line 33) | def __call__(self, results):
    method _add_default_meta_keys (line 70) | def _add_default_meta_keys(self, results):
    method __repr__ (line 95) | def __repr__(self):

FILE: code/mmdet/datasets/pipelines/instaboost.py
  class InstaBoost (line 7) | class InstaBoost(object):
    method __init__ (line 14) | def __init__(self,
    method _load_anns (line 35) | def _load_anns(self, results):
    method _parse_anns (line 57) | def _parse_anns(self, results, anns, img):
    method __call__ (line 78) | def __call__(self, results):
    method __repr__ (line 94) | def __repr__(self):

FILE: code/mmdet/datasets/pipelines/loading.py
  class LoadImageFromFile (line 12) | class LoadImageFromFile(object):
    method __init__ (line 31) | def __init__(self,
    method __call__ (line 40) | def __call__(self, results):
    method __repr__ (line 72) | def __repr__(self):
  class LoadMultiChannelImageFromFiles (line 81) | class LoadMultiChannelImageFromFiles(object):
    method __init__ (line 101) | def __init__(self,
    method __call__ (line 110) | def __call__(self, results):
    method __repr__ (line 155) | def __repr__(self):
  class LoadAnnotations (line 164) | class LoadAnnotations(object):
    method __init__ (line 183) | def __init__(self,
    method _load_bboxes (line 207) | def _load_bboxes(self, results):
    method _load_extremes (line 227) | def _load_extremes(self, results):
    method _load_keypoints (line 242) | def _load_keypoints(self, results):
    method _load_labels (line 257) | def _load_labels(self, results):
    method _poly2mask (line 270) | def _poly2mask(self, mask_ann, img_h, img_w):
    method process_polygons (line 297) | def process_polygons(self, polygons):
    method uniformsample (line 314) | def uniformsample(self, pgtnp_px2, newpnum): # https://github.com/zju3...
    method _polygon_area (line 378) | def _polygon_area(self, poly):
    method filter_tiny_polys (line 396) | def filter_tiny_polys(self, polys):
    method get_cw_poly (line 405) | def get_cw_poly(self, poly):
    method unify_origin_polygon (line 408) | def unify_origin_polygon(self, poly):
    method unify_polygons (line 422) | def unify_polygons(self, polygons, gt_bbox):
    method _load_masks (line 443) | def _load_masks(self, results):
    method _load_semantic_seg (line 469) | def _load_semantic_seg(self, results):
    method __call__ (line 490) | def __call__(self, results):
    method __repr__ (line 517) | def __repr__(self):
  class LoadProposals (line 531) | class LoadProposals(object):
    method __init__ (line 541) | def __init__(self, num_max_proposals=None):
    method __call__ (line 544) | def __call__(self, results):
    method __repr__ (line 570) | def __repr__(self):

FILE: code/mmdet/datasets/pipelines/loading_reppointsv2.py
  class LoadRPDV2Annotations (line 9) | class LoadRPDV2Annotations(object):
    method __init__ (line 27) | def __init__(self, num_classes=80):
    method _load_semantic_map_from_box (line 31) | def _load_semantic_map_from_box(self, results):
    method __call__ (line 52) | def __call__(self, results):
    method __repr__ (line 66) | def __repr__(self):
  class LoadDenseRPDV2Annotations (line 73) | class LoadDenseRPDV2Annotations(object):
    method __init__ (line 91) | def __init__(self):
    method mask_to_poly (line 94) | def mask_to_poly(self, mask):
    method _load_semantic_map_from_mask (line 103) | def _load_semantic_map_from_mask(self, results):
    method _load_contours (line 120) | def _load_contours(self, results):
    method __call__ (line 143) | def __call__(self, results):
    method __repr__ (line 159) | def __repr__(self):

FILE: code/mmdet/datasets/pipelines/test_time_aug.py
  class MultiScaleFlipAug (line 10) | class MultiScaleFlipAug(object):
    method __init__ (line 52) | def __init__(self,
    method __call__ (line 83) | def __call__(self, results):
    method __repr__ (line 112) | def __repr__(self):

FILE: code/mmdet/datasets/pipelines/transforms.py
  class Resize (line 25) | class Resize(object):
    method __init__ (line 54) | def __init__(self,
    method random_select (line 80) | def random_select(img_scales):
    method random_sample (line 98) | def random_sample(img_scales):
    method random_sample_ratio (line 125) | def random_sample_ratio(img_scale, ratio_range):
    method _random_scale (line 151) | def _random_scale(self, results):
    method _resize_img (line 184) | def _resize_img(self, results):
    method _resize_bboxes (line 209) | def _resize_bboxes(self, results):
    method _resize_extremes (line 218) | def _resize_extremes(self, results):
    method _resize_keypoints (line 228) | def _resize_keypoints(self, results):
    method _resize_masks (line 241) | def _resize_masks(self, results):
    method _resize_seg (line 251) | def _resize_seg(self, results):
    method __call__ (line 262) | def __call__(self, results):
    method __repr__ (line 295) | def __repr__(self):
  class RandomFlip (line 305) | class RandomFlip(object):
    method __init__ (line 318) | def __init__(self, flip_ratio=None, direction='horizontal', keep_poly_...
    method bbox_flip (line 328) | def bbox_flip(self, bboxes, img_shape, direction):
    method extreme_flip (line 354) | def extreme_flip(self, extremes, img_shape, direction):
    method keypoint_flip (line 390) | def keypoint_flip(self, keypoints, img_shape, direction):
    method __call__ (line 409) | def __call__(self, results):
    method __repr__ (line 458) | def __repr__(self):
  class Pad (line 463) | class Pad(object):
    method __init__ (line 476) | def __init__(self, size=None, size_divisor=None, pad_val=0):
    method _pad_img (line 484) | def _pad_img(self, results):
    method _pad_masks (line 497) | def _pad_masks(self, results):
    method _pad_seg (line 503) | def _pad_seg(self, results):
    method __call__ (line 509) | def __call__(self, results):
    method __repr__ (line 524) | def __repr__(self):
  class Normalize (line 533) | class Normalize(object):
    method __init__ (line 545) | def __init__(self, mean, std, to_rgb=True):
    method __call__ (line 550) | def __call__(self, results):
    method __repr__ (line 568) | def __repr__(self):
  class RandomCrop (line 575) | class RandomCrop(object):
    method __init__ (line 591) | def __init__(self, crop_size):
    method __call__ (line 604) | def __call__(self, results):
    method __repr__ (line 670) | def __repr__(self):
  class SegRescale (line 675) | class SegRescale(object):
    method __init__ (line 682) | def __init__(self, scale_factor=1):
    method __call__ (line 685) | def __call__(self, results):
    method __repr__ (line 701) | def __repr__(self):
  class PhotoMetricDistortion (line 706) | class PhotoMetricDistortion(object):
    method __init__ (line 727) | def __init__(self,
    method __call__ (line 737) | def __call__(self, results):
    method __repr__ (line 800) | def __repr__(self):
  class Expand (line 812) | class Expand(object):
    method __init__ (line 825) | def __init__(self,
    method __call__ (line 841) | def __call__(self, results):
    method __repr__ (line 889) | def __repr__(self):
  class MinIoURandomCrop (line 898) | class MinIoURandomCrop(object):
    method __init__ (line 915) | def __init__(self, min_ious=(0.1, 0.3, 0.5, 0.7, 0.9), min_crop_size=0...
    method __call__ (line 929) | def __call__(self, results):
    method __repr__ (line 1022) | def __repr__(self):
  class Corrupt (line 1030) | class Corrupt(object):
    method __init__ (line 1041) | def __init__(self, corruption, severity=1):
    method __call__ (line 1045) | def __call__(self, results):
    method __repr__ (line 1066) | def __repr__(self):
  class Albu (line 1074) | class Albu(object):
    method __init__ (line 1116) | def __init__(self,
    method albu_builder (line 1153) | def albu_builder(self, cfg):
    method mapper (line 1186) | def mapper(d, keymap):
    method __call__ (line 1204) | def __call__(self, results):
    method __repr__ (line 1263) | def __repr__(self):
  class RandomCenterCropPad (line 1269) | class RandomCenterCropPad(object):
    method __init__ (line 1349) | def __init__(self,
    method _get_border (line 1391) | def _get_border(self, border, size):
    method _filter_boxes (line 1408) | def _filter_boxes(self, patch, boxes):
    method _crop_image_and_paste (line 1423) | def _crop_image_and_paste(self, image, center, size):
    method _train_aug (line 1472) | def _train_aug(self, results):
    method _test_aug (line 1538) | def _test_aug(self, results):
    method __call__ (line 1570) | def __call__(self, results):
    method __repr__ (line 1582) | def __repr__(self):

FILE: code/mmdet/datasets/samplers/distributed_sampler.py
  class DistributedSampler (line 5) | class DistributedSampler(_DistributedSampler):
    method __init__ (line 7) | def __init__(self, dataset, num_replicas=None, rank=None, shuffle=True):
    method __iter__ (line 11) | def __iter__(self):

FILE: code/mmdet/datasets/samplers/group_sampler.py
  class GroupSampler (line 10) | class GroupSampler(Sampler):
    method __init__ (line 12) | def __init__(self, dataset, samples_per_gpu=1):
    method __iter__ (line 23) | def __iter__(self):
    method __len__ (line 47) | def __len__(self):
  class DistributedGroupSampler (line 51) | class DistributedGroupSampler(Sampler):
    method __init__ (line 69) | def __init__(self,
    method __iter__ (line 96) | def __iter__(self):
    method __len__ (line 136) | def __len__(self):
    method set_epoch (line 139) | def set_epoch(self, epoch):

FILE: code/mmdet/datasets/voc.py
  class VOCDataset (line 7) | class VOCDataset(XMLDataset):
    method __init__ (line 14) | def __init__(self, **kwargs):
    method evaluate (line 23) | def evaluate(self,

FILE: code/mmdet/datasets/wider_face.py
  class WIDERFaceDataset (line 11) | class WIDERFaceDataset(XMLDataset):
    method __init__ (line 19) | def __init__(self, **kwargs):
    method load_annotations (line 22) | def load_annotations(self, ann_file):

FILE: code/mmdet/datasets/xml_style.py
  class XMLDataset (line 13) | class XMLDataset(CustomDataset):
    method __init__ (line 22) | def __init__(self, min_size=None, **kwargs):
    method load_annotations (line 27) | def load_annotations(self, ann_file):
    method get_subset_by_classes (line 61) | def get_subset_by_classes(self):
    method get_ann_info (line 78) | def get_ann_info(self, idx):
    method get_cat_ids (line 143) | def get_cat_ids(self, idx):

FILE: code/mmdet/models/backbones/detectors_resnet.py
  class Bottleneck (line 10) | class Bottleneck(_Bottleneck):
    method __init__ (line 28) | def __init__(self,
    method init_weights (line 61) | def init_weights(self):
    method rfp_forward (line 66) | def rfp_forward(self, x, rfp_feat):
  class ResLayer (line 113) | class ResLayer(nn.Sequential):
    method __init__ (line 139) | def __init__(self,
  class DetectoRS_ResNet (line 205) | class DetectoRS_ResNet(ResNet):
    method __init__ (line 228) | def __init__(self,
    method make_res_layer (line 277) | def make_res_layer(self, **kwargs):
    method forward (line 281) | def forward(self, x):
    method rfp_forward (line 288) | def rfp_forward(self, x, rfp_feats):

FILE: code/mmdet/models/backbones/detectors_resnext.py
  class Bottleneck (line 10) | class Bottleneck(_Bottleneck):
    method __init__ (line 13) | def __init__(self,
  class DetectoRS_ResNeXt (line 97) | class DetectoRS_ResNeXt(DetectoRS_ResNet):
    method __init__ (line 111) | def __init__(self, groups=1, base_width=4, **kwargs):
    method make_res_layer (line 116) | def make_res_layer(self, **kwargs):

FILE: code/mmdet/models/backbones/hourglass.py
  class HourglassModule (line 9) | class HourglassModule(nn.Module):
    method __init__ (line 23) | def __init__(self,
    method forward (line 70) | def forward(self, x):
  class HourglassNet (line 81) | class HourglassNet(nn.Module):
    method __init__ (line 112) | def __init__(self,
    method init_weights (line 164) | def init_weights(self, pretrained=None):
    method forward (line 174) | def forward(self, x):

FILE: code/mmdet/models/backbones/hrnet.py
  class HRModule (line 12) | class HRModule(nn.Module):
    method __init__ (line 17) | def __init__(self,
    method _check_branches (line 43) | def _check_branches(self, num_branches, num_blocks, in_channels,
    method _make_one_branch (line 60) | def _make_one_branch(self,
    method _make_branches (line 104) | def _make_branches(self, num_branches, block, num_blocks, num_channels):
    method _make_fuse_layers (line 113) | def _make_fuse_layers(self):
    method forward (line 175) | def forward(self, x):
  class HRNet (line 196) | class HRNet(nn.Module):
    method __init__ (line 257) | def __init__(self,
    method norm1 (line 346) | def norm1(self):
    method norm2 (line 351) | def norm2(self):
    method _make_transition_layer (line 355) | def _make_transition_layer(self, num_channels_pre_layer,
    method _make_layer (line 401) | def _make_layer(self, block, inplanes, planes, blocks, stride=1):
    method _make_stage (line 436) | def _make_stage(self, layer_config, in_channels, multiscale_output=True):
    method init_weights (line 465) | def init_weights(self, pretrained=None):
    method forward (line 491) | def forward(self, x):
    method train (line 527) | def train(self, mode=True):

FILE: code/mmdet/models/backbones/mobilenet.py
  class _NewEmptyTensorOp (line 22) | class _NewEmptyTensorOp(torch.autograd.Function):
    method forward (line 24) | def forward(ctx, x, new_shape):
    method backward (line 29) | def backward(ctx, grad):
  class Conv2d (line 34) | class Conv2d(torch.nn.Conv2d):
    method forward (line 35) | def forward(self, x):
  function conv_bn (line 50) | def conv_bn(inp, oup, stride, norm_cfg=dict(type='BN', requires_grad=Tru...
  function conv_1x1_bn (line 58) | def conv_1x1_bn(inp, oup, norm_cfg=dict(type='BN', requires_grad=True)):
  class InvertedResidual (line 66) | class InvertedResidual(nn.Module):
    method __init__ (line 67) | def __init__(self, inp, oup, stride, expand_ratio, norm_cfg=dict(type=...
    method forward (line 100) | def forward(self, x):
  class MobileNetV2 (line 108) | class MobileNetV2(nn.Module):
    method __init__ (line 112) | def __init__(self,
    method _freeze_backbone (line 150) | def _freeze_backbone(self, freeze_at):
    method forward (line 155) | def forward(self, x):
    method init_weights (line 163) | def init_weights(self, pretrained=None):
  function load_url_dist (line 182) | def load_url_dist(url, model_dir=None, map_location=None):
  function _load_checkpoint (line 196) | def _load_checkpoint(filename, map_location=None):
  function load_checkpoint (line 246) | def load_checkpoint(model,

FILE: code/mmdet/models/backbones/regnet.py
  class RegNet (line 11) | class RegNet(ResNet):
    method __init__ (line 83) | def __init__(self,
    method _make_stem_layer (line 204) | def _make_stem_layer(self, in_channels, base_channels):
    method generate_regnet (line 218) | def generate_regnet(self,
    method quantize_float (line 251) | def quantize_float(number, divisor):
    method adjust_width_group (line 263) | def adjust_width_group(self, widths, bottleneck_ratio, groups):
    method get_stages_from_blocks (line 288) | def get_stages_from_blocks(self, widths):
    method forward (line 310) | def forward(self, x):

FILE: code/mmdet/models/backbones/res2net.py
  class Bottle2neck (line 17) | class Bottle2neck(_Bottleneck):
    method __init__ (line 20) | def __init__(self,
    method forward (line 108) | def forward(self, x):
  class Res2Layer (line 165) | class Res2Layer(nn.Sequential):
    method __init__ (line 184) | def __init__(self,
  class Res2Net (line 245) | class Res2Net(ResNet):
    method __init__ (line 302) | def __init__(self,
    method make_res_layer (line 314) | def make_res_layer(self, **kwargs):
    method init_weights (line 321) | def init_weights(self, pretrained=None):

FILE: code/mmdet/models/backbones/resnet.py
  class BasicBlock (line 14) | class BasicBlock(nn.Module):
    method __init__ (line 17) | def __init__(self,
    method norm1 (line 57) | def norm1(self):
    method norm2 (line 62) | def norm2(self):
    method forward (line 66) | def forward(self, x):
  class Bottleneck (line 96) | class Bottleneck(nn.Module):
    method __init__ (line 99) | def __init__(self,
    method make_block_plugins (line 216) | def make_block_plugins(self, in_channels, plugins):
    method forward_plugin (line 240) | def forward_plugin(self, x, plugin_names):
    method norm1 (line 247) | def norm1(self):
    method norm2 (line 252) | def norm2(self):
    method norm3 (line 257) | def norm3(self):
    method forward (line 261) | def forward(self, x):
  class ResNet (line 305) | class ResNet(nn.Module):
    method __init__ (line 364) | def __init__(self,
    method make_stage_plugins (line 452) | def make_stage_plugins(self, plugins, stage_idx):
    method make_res_layer (line 512) | def make_res_layer(self, **kwargs):
    method norm1 (line 517) | def norm1(self):
    method _make_stem_layer (line 521) | def _make_stem_layer(self, in_channels, stem_channels):
    method _freeze_stages (line 569) | def _freeze_stages(self):
    method init_weights (line 587) | def init_weights(self, pretrained=None):
    method forward (line 619) | def forward(self, x):
    method train (line 636) | def train(self, mode=True):
  class ResNetV1d (line 649) | class ResNetV1d(ResNet):
    method __init__ (line 659) | def __init__(self, **kwargs):

FILE: code/mmdet/models/backbones/resnext.py
  class Bottleneck (line 11) | class Bottleneck(_Bottleneck):
    method __init__ (line 14) | def __init__(self,
  class ResNeXt (line 87) | class ResNeXt(ResNet):
    method __init__ (line 120) | def __init__(self, groups=1, base_width=4, **kwargs):
    method make_res_layer (line 125) | def make_res_layer(self, **kwargs):

FILE: code/mmdet/models/backbones/ssd_vgg.py
  class SSDVGG (line 12) | class SSDVGG(VGG):
    method __init__ (line 38) | def __init__(self,
    method init_weights (line 75) | def init_weights(self, pretrained=None):
    method forward (line 102) | def forward(self, x):
    method _make_extra_layers (line 119) | def _make_extra_layers(self, outplanes):
  class L2Norm (line 146) | class L2Norm(nn.Module):
    method __init__ (line 148) | def __init__(self, n_dims, scale=20., eps=1e-10):
    method forward (line 163) | def forward(self, x):

FILE: code/mmdet/models/builder.py
  function build (line 13) | def build(cfg, registry, default_args=None):
  function build_backbone (line 35) | def build_backbone(cfg):
  function build_neck (line 40) | def build_neck(cfg):
  function build_roi_extractor (line 45) | def build_roi_extractor(cfg):
  function build_shared_head (line 50) | def build_shared_head(cfg):
  function build_head (line 55) | def build_head(cfg):
  function build_loss (line 60) | def build_loss(cfg):
  function build_detector (line 65) | def build_detector(cfg, train_cfg=None, test_cfg=None):

FILE: code/mmdet/models/dense_heads/anchor_free_head.py
  class AnchorFreeHead (line 14) | class AnchorFreeHead(BaseDenseHead):
    method __init__ (line 42) | def __init__(self,
    method _init_layers (line 87) | def _init_layers(self):
    method _init_cls_convs (line 93) | def _init_cls_convs(self):
    method _init_reg_convs (line 113) | def _init_reg_convs(self):
    method _init_predictor (line 133) | def _init_predictor(self):
    method init_weights (line 139) | def init_weights(self):
    method _load_from_state_dict (line 151) | def _load_from_state_dict(self, state_dict, prefix, local_metadata, st...
    method forward (line 189) | def forward(self, feats):
    method forward_single (line 207) | def forward_single(self, x):
    method loss (line 232) | def loss(self,
    method get_bboxes (line 261) | def get_bboxes(self,
    method get_targets (line 284) | def get_targets(self, points, gt_bboxes_list, gt_labels_list):
    method _get_points_single (line 298) | def _get_points_single(self,
    method get_points (line 314) | def get_points(self, featmap_sizes, dtype, device, flatten=False):

FILE: code/mmdet/models/dense_heads/anchor_head.py
  class AnchorHead (line 14) | class AnchorHead(BaseDenseHead):
    method __init__ (line 35) | def __init__(self,
    method _init_layers (line 103) | def _init_layers(self):
    method init_weights (line 109) | def init_weights(self):
    method forward_single (line 114) | def forward_single(self, x):
    method forward (line 131) | def forward(self, feats):
    method get_anchors (line 149) | def get_anchors(self, featmap_sizes, img_metas, device='cuda'):
    method _get_targets_single (line 179) | def _get_targets_single(self,
    method get_targets (line 279) | def get_targets(self,
    method loss_single (line 378) | def loss_single(self, cls_score, bbox_pred, anchors, labels, label_wei...
    method loss (line 426) | def loss(self,
    method get_bboxes (line 496) | def get_bboxes(self,
    method _get_bboxes_single (line 574) | def _get_bboxes_single(self,

FILE: code/mmdet/models/dense_heads/atss_head.py
  function reduce_mean (line 13) | def reduce_mean(tensor):
  class ATSSHead (line 22) | class ATSSHead(AnchorHead):
    method __init__ (line 33) | def __init__(self,
    method _init_layers (line 57) | def _init_layers(self):
    method init_weights (line 94) | def init_weights(self):
    method forward (line 105) | def forward(self, feats):
    method forward_single (line 123) | def forward_single(self, x, scale):
    method loss_single (line 152) | def loss_single(self, anchors, cls_score, bbox_pred, centerness, labels,
    method loss (line 228) | def loss(self,
    method centerness_target (line 302) | def centerness_target(self, anchors, bbox_targets):
    method get_bboxes (line 321) | def get_bboxes(self,
    method _get_bboxes_single (line 380) | def _get_bboxes_single(self,
    method get_targets (line 467) | def get_targets(self,
    method _get_target_single (line 531) | def _get_target_single(self,
    method get_num_level_anchors_inside (line 635) | def get_num_level_anchors_inside(self, num_level_anchors, inside_flags):

FILE: code/mmdet/models/dense_heads/base_dense_head.py
  class BaseDenseHead (line 6) | class BaseDenseHead(nn.Module, metaclass=ABCMeta):
    method __init__ (line 9) | def __init__(self):
    method loss (line 13) | def loss(self, **kwargs):
    method get_bboxes (line 18) | def get_bboxes(self, **kwargs):
    method forward_train (line 22) | def forward_train(self,

FILE: code/mmdet/models/dense_heads/dense_reppoints_head.py
  class DenseRepPointsHead (line 18) | class DenseRepPointsHead(AnchorFreeHead):
    method __init__ (line 36) | def __init__(self,
    method _init_layers (line 108) | def _init_layers(self):
    method init_weights (line 163) | def init_weights(self):
    method points2bbox (line 183) | def points2bbox(self, pts):
    method sample_offset (line 206) | def sample_offset(self, x, flow, padding_mode):
    method compute_offset_feature (line 230) | def compute_offset_feature(self, x, offset, padding_mode):
    method sample_offset_3d (line 252) | def sample_offset_3d(self, x, flow, padding_mode):
    method compute_offset_feature_5d (line 281) | def compute_offset_feature_5d(self, x, offset, padding_mode):
    method forward (line 296) | def forward(self, feats, test=False):
    method forward_pts_head_single (line 307) | def forward_pts_head_single(self, x):
    method forward_mask_head (line 346) | def forward_mask_head(self, mask_feat_list, pts_out_list):
    method forward_mask_head_single (line 371) | def forward_mask_head_single(self, pts, mask_feat):
    method normalize_pts_within_bboxes (line 395) | def normalize_pts_within_bboxes(pts):
    method grid_position_sensitive_group_partition (line 420) | def grid_position_sensitive_group_partition(self, pts, num_group):
    method get_points (line 442) | def get_points(self, featmap_sizes, img_metas):
    method offset_to_pts (line 481) | def offset_to_pts(self, center_list, pred_list):
    method offset_to_pts_img_lvl (line 497) | def offset_to_pts_img_lvl(self, center_list, pred_list):
    method _dense_point_target_single (line 519) | def _dense_point_target_single(self,
    method get_targets (line 618) | def get_targets(self,
    method loss_single (line 715) | def loss_single(self, cls_score, pts_pred_init, pts_pred_refine, pts_s...
    method loss (line 786) | def loss(self,
    method get_bboxes (line 883) | def get_bboxes(self,
    method _get_bboxes_single (line 923) | def _get_bboxes_single(self,
    method get_num_level_proposals_inside (line 995) | def get_num_level_proposals_inside(self, num_level_proposals, inside_f...
  function mask_to_levels (line 1003) | def mask_to_levels(target, mask_index_list):
  function mask_to_poly (line 1019) | def mask_to_poly(mask):
  function distance_sample_pts (line 1029) | def distance_sample_pts(gt_bboxes, gt_masks, cfg, num_pts):

FILE: code/mmdet/models/dense_heads/dense_reppoints_v2_head.py
  class DenseRepPointsV2Head (line 18) | class DenseRepPointsV2Head(AnchorFreeHead):
    method __init__ (line 36) | def __init__(self,
    method _init_layers (line 117) | def _init_layers(self):
    method init_weights (line 198) | def init_weights(self):
    method points2bbox (line 223) | def points2bbox(self, pts):
    method sample_offset (line 246) | def sample_offset(self, x, flow, padding_mode):
    method compute_offset_feature (line 270) | def compute_offset_feature(self, x, offset, padding_mode):
    method sample_offset_3d (line 292) | def sample_offset_3d(self, x, flow, padding_mode):
    method compute_offset_feature_5d (line 321) | def compute_offset_feature_5d(self, x, offset, padding_mode):
    method forward (line 336) | def forward(self, feats, test=False):
    method forward_pts_head_single (line 350) | def forward_pts_head_single(self, x):
    method forward_mask_head (line 411) | def forward_mask_head(self, mask_feat_list, pts_out_list, sem_feat_list):
    method forward_mask_head_single (line 436) | def forward_mask_head_single(self, pts, mask_feat):
    method normalize_pts_within_bboxes (line 460) | def normalize_pts_within_bboxes(pts):
    method grid_position_sensitive_group_partition (line 485) | def grid_position_sensitive_group_partition(self, pts, num_group):
    method get_points (line 507) | def get_points(self, featmap_sizes, img_metas):
    method offset_to_pts (line 546) | def offset_to_pts(self, center_list, pred_list):
    method offset_to_pts_img_lvl (line 562) | def offset_to_pts_img_lvl(self, center_list, pred_list):
    method _dense_point_target_single (line 584) | def _dense_point_target_single(self,
    method get_targets (line 683) | def get_targets(self,
    method _cont_target_single (line 780) | def _cont_target_single(self,
    method get_cont_target (line 803) | def get_cont_target(self,
    method loss_single (line 845) | def loss_single(self, cls_score, pts_pred_init, pts_pred_refine, pts_s...
    method loss (line 930) | def loss(self,
    method get_bboxes (line 1073) | def get_bboxes(self,
    method _get_bboxes_single (line 1122) | def _get_bboxes_single(self,
    method get_num_level_proposals_inside (line 1260) | def get_num_level_proposals_inside(self, num_level_proposals, inside_f...
  function mask_to_levels (line 1268) | def mask_to_levels(target, mask_index_list):
  function mask_to_poly (line 1284) | def mask_to_poly(mask):
  function distance_sample_pts (line 1294) | def distance_sample_pts(gt_bboxes, gt_masks, cfg, num_pts):

FILE: code/mmdet/models/dense_heads/fcos_head.py
  class FCOSHead (line 14) | class FCOSHead(AnchorFreeHead):
    method __init__ (line 55) | def __init__(self,
    method _init_layers (line 91) | def _init_layers(self):
    method init_weights (line 97) | def init_weights(self):
    method forward (line 102) | def forward(self, feats):
    method forward_single (line 123) | def forward_single(self, x, scale, stride):
    method loss (line 155) | def loss(self,
    method get_bboxes (line 252) | def get_bboxes(self,
    method _get_bboxes_single (line 309) | def _get_bboxes_single(self,
    method _get_points_single (line 385) | def _get_points_single(self,
    method get_targets (line 397) | def get_targets(self, points, gt_bboxes_list, gt_labels_list):
    method _get_target_single (line 458) | def _get_target_single(self, gt_bboxes, gt_labels, points, regress_ran...
    method centerness_target (line 542) | def centerness_target(self, pos_bbox_targets):

FILE: code/mmdet/models/dense_heads/fovea_head.py
  class FeatureAlign (line 13) | class FeatureAlign(nn.Module):
    method __init__ (line 15) | def __init__(self,
    method init_weights (line 32) | def init_weights(self):
    method forward (line 36) | def forward(self, x, shape):
  class FoveaHead (line 43) | class FoveaHead(AnchorFreeHead):
    method __init__ (line 48) | def __init__(self,
    method _init_layers (line 65) | def _init_layers(self):
    method init_weights (line 105) | def init_weights(self):
    method forward_single (line 110) | def forward_single(self, x):
    method _get_points_single (line 123) | def _get_points_single(self, *args, **kwargs):
    method loss (line 127) | def loss(self,
    method get_targets (line 178) | def get_targets(self, gt_bbox_list, gt_label_list, featmap_sizes, poin...
    method _get_target_single (line 200) | def _get_target_single(self,
    method get_bboxes (line 261) | def get_bboxes(self,
    method _get_bboxes_single (line 292) | def _get_bboxes_single(self,

FILE: code/mmdet/models/dense_heads/free_anchor_retina_head.py
  class FreeAnchorRetinaHead (line 10) | class FreeAnchorRetinaHead(RetinaHead):
    method __init__ (line 31) | def __init__(self,
    method loss (line 51) | def loss(self,
    method positive_bag_loss (line 217) | def positive_bag_loss(self, matched_cls_prob, matched_box_prob):
    method negative_bag_loss (line 244) | def negative_bag_loss(self, cls_prob, box_prob):

FILE: code/mmdet/models/dense_heads/fsaf_head.py
  class FSAFHead (line 13) | class FSAFHead(RetinaHead):
    method forward_single (line 32) | def forward_single(self, x):
    method init_weights (line 49) | def init_weights(self):
    method _get_targets_single (line 56) | def _get_targets_single(self,
    method loss (line 161) | def loss(self,
    method calculate_accuracy (line 289) | def calculate_accuracy(self, cls_scores, labels_list, pos_inds):
    method collect_loss_level_single (line 320) | def collect_loss_level_single(self, cls_loss, reg_loss, assigned_gt_inds,
    method reweight_loss_single (line 351) | def reweight_loss_single(self, cls_loss, reg_loss, assigned_gt_inds,

FILE: code/mmdet/models/dense_heads/ga_retina_head.py
  class GARetinaHead (line 10) | class GARetinaHead(GuidedAnchorHead):
    method __init__ (line 13) | def __init__(self,
    method _init_layers (line 25) | def _init_layers(self):
    method init_weights (line 72) | def init_weights(self):
    method forward_single (line 88) | def forward_single(self, x):

FILE: code/mmdet/models/dense_heads/ga_rpn_head.py
  class GARPNHead (line 13) | class GARPNHead(RPNTestMixin, GuidedAnchorHead):
    method __init__ (line 16) | def __init__(self, in_channels, **kwargs):
    method _init_layers (line 20) | def _init_layers(self):
    method init_weights (line 26) | def init_weights(self):
    method forward_single (line 31) | def forward_single(self, x):
    method loss (line 40) | def loss(self,
    method _get_bboxes_single (line 63) | def _get_bboxes_single(self,

FILE: code/mmdet/models/dense_heads/gfl_head.py
  function reduce_mean (line 15) | def reduce_mean(tensor):
  class Integral (line 23) | class Integral(nn.Module):
    method __init__ (line 36) | def __init__(self, reg_max=16):
    method forward (line 42) | def forward(self, x):
  class GFLHead (line 60) | class GFLHead(AnchorHead):
    method __init__ (line 93) | def __init__(self,
    method _init_layers (line 118) | def _init_layers(self):
    method init_weights (line 151) | def init_weights(self):
    method forward (line 161) | def forward(self, feats):
    method forward_single (line 179) | def forward_single(self, x, scale):
    method anchor_center (line 205) | def anchor_center(self, anchors):
    method loss_single (line 218) | def loss_single(self, anchors, cls_score, bbox_pred, labels, label_wei...
    method loss (line 307) | def loss(self,
    method _get_bboxes_single (line 379) | def _get_bboxes_single(self,
    method get_targets (line 459) | def get_targets(self,
    method _get_target_single (line 523) | def _get_target_single(self,
    method get_num_level_anchors_inside (line 627) | def get_num_level_anchors_inside(self, num_level_anchors, inside_flags):

FILE: code/mmdet/models/dense_heads/guided_anchor_head.py
  class FeatureAdaption (line 14) | class FeatureAdaption(nn.Module):
    method __init__ (line 28) | def __init__(self,
    method init_weights (line 45) | def init_weights(self):
    method forward (line 49) | def forward(self, x, shape):
  class GuidedAnchorHead (line 56) | class GuidedAnchorHead(AnchorHead):
    method __init__ (line 89) | def __init__(
    method _init_layers (line 204) | def _init_layers(self):
    method init_weights (line 219) | def init_weights(self):
    method forward_single (line 229) | def forward_single(self, x):
    method forward (line 242) | def forward(self, feats):
    method get_sampled_approxs (line 245) | def get_sampled_approxs(self, featmap_sizes, img_metas, device='cuda'):
    method get_anchors (line 295) | def get_anchors(self,
    method _get_guided_anchors_single (line 347) | def _get_guided_anchors_single(self,
    method ga_loc_targets (line 381) | def ga_loc_targets(self, gt_bboxes_list, featmap_sizes):
    method _ga_shape_target_single (line 483) | def _ga_shape_target_single(self,
    method ga_shape_targets (line 546) | def ga_shape_targets(self,
    method loss_shape_single (line 612) | def loss_shape_single(self, shape_pred, bbox_anchors, bbox_gts,
    method loss_loc_single (line 636) | def loss_loc_single(self, loc_pred, loc_target, loc_weight,
    method loss (line 647) | def loss(self,
    method get_bboxes (line 753) | def get_bboxes(self,
    method _get_bboxes_single (line 797) | def _get_bboxes_single(self,

FILE: code/mmdet/models/dense_heads/lscpvnet_head.py
  class LSCPVHead (line 15) | class LSCPVHead(AnchorFreeHead):
    method __init__ (line 16) | def __init__(self,
    method _init_layers (line 98) | def _init_layers(self):
    method init_weights (line 181) | def init_weights(self):
    method extreme_points2bbox (line 208) | def extreme_points2bbox(self, pts, y_first=True, extreme=False):
    method get_pred_reg (line 236) | def get_pred_reg(self, raw_reg1, raw_reg2):
    method get_bbox_gt_reg (line 245) | def get_bbox_gt_reg(self, gt_pts, anchor_pts, bbox_weights):
    method forward (line 272) | def forward(self, feats):
    method forward_single1 (line 287) | def forward_single1(self, x):
    method forward_single2 (line 343) | def forward_single2(self, bbox_dcn_offset, bbox_reg_init_sp, fpn_level,
    method get_points (line 389) | def get_points(self, featmap_sizes, img_metas):
    method centers_to_bboxes (line 428) | def centers_to_bboxes(self, point_list):
    method offset_to_pts (line 442) | def offset_to_pts(self, center_list, pred_list):
    method _point_target_single (line 463) | def _point_target_single(self,
    method get_targets (line 538) | def get_targets(self,
    method _hm_target_single (line 605) | def _hm_target_single(self,
    method get_hm_targets (line 651) | def get_hm_targets(self,
    method loss_single (line 717) | def loss_single(self, cls_score, bbox_pts_pred_init, bbox_pts_pred_ref...
    method loss (line 816) | def loss(self,
    method get_bboxes (line 957) | def get_bboxes(self,
    method _get_bboxes_single (line 1001) | def _get_bboxes_single(self,
    method get_num_level_proposals_inside (line 1097) | def get_num_level_proposals_inside(self, num_level_proposals, inside_f...
  class DCNConvModule (line 1105) | class DCNConvModule(nn.Module):
    method __init__ (line 1106) | def __init__(
    method forward (line 1122) | def forward(self, x):

FILE: code/mmdet/models/dense_heads/lsnet_head.py
  class LSHead (line 17) | class LSHead(AnchorFreeHead):
    method __init__ (line 18) | def __init__(self,
    method _init_layers (line 93) | def _init_layers(self):
    method init_weights (line 259) | def init_weights(self):
    method extreme_points2bbox (line 321) | def extreme_points2bbox(self, pts, y_first=True, extreme=False):
    method vectors2bbox (line 349) | def vectors2bbox(self, pts, y_first=True, vector=False):
    method get_pred_reg (line 372) | def get_pred_reg(self, raw_reg1, raw_reg2):
    method get_bbox_gt_reg (line 402) | def get_bbox_gt_reg(self, gt_pts, anchor_pts, bbox_weights):
    method get_poly_gt_reg (line 429) | def get_poly_gt_reg(self, gt_pts, anchor_pts, bbox_weights):
    method forward_train (line 456) | def forward_train(self,
    method forward (line 479) | def forward(self, feats):
    method forward_single1 (line 502) | def forward_single1(self, x):
    method forward_single2 (line 600) | def forward_single2(self, bbox_dcn_offset, bbox_reg_init_sp, segm_dcn_...
    method get_points (line 757) | def get_points(self, featmap_sizes, img_metas):
    method _target_single (line 796) | def _target_single(self,
    method get_targets (line 919) | def get_targets(self,
    method loss_single (line 1021) | def loss_single(self,
    method loss (line 1272) | def loss(self,
    method get_bboxes (line 1439) | def get_bboxes(self,
    method _get_bboxes_single (line 1513) | def _get_bboxes_single(self,
    method get_num_level_proposals_inside (line 1670) | def get_num_level_proposals_inside(self, num_level_proposals, inside_f...
    method get_border_center (line 1677) | def get_border_center(self, gt_bboxes_list):
    method component_polygon_area (line 1699) | def component_polygon_area(self, poly):
    method process_polygons (line 1717) | def process_polygons(self, gt_masks_list, cls_scores):
    method process_keypoints_with_bbox (line 1758) | def process_keypoints_with_bbox(self, gt_bboxes_list, gt_keypoints_vs_...
    method process_keypoints_with_kbox (line 1786) | def process_keypoints_with_kbox(self, gt_keypoints_vs_list):
  class DCNConvModule (line 1830) | class DCNConvModule(nn.Module):
    method __init__ (line 1831) | def __init__(
    method forward (line 1847) | def forward(self, x):

FILE: code/mmdet/models/dense_heads/nasfcos_head.py
  class NASFCOSHead (line 12) | class NASFCOSHead(FCOSHead):
    method _init_layers (line 21) | def _init_layers(self):
    method init_weights (line 64) | def init_weights(self):

FILE: code/mmdet/models/dense_heads/pisa_retinanet_head.py
  class PISARetinaHead (line 10) | class PISARetinaHead(RetinaHead):
    method loss (line 21) | def loss(self,

FILE: code/mmdet/models/dense_heads/pisa_ssd_head.py
  class PISASSDHead (line 11) | class PISASSDHead(SSDHead):
    method loss (line 13) | def loss(self,

FILE: code/mmdet/models/dense_heads/reppoints_head.py
  class RepPointsHead (line 14) | class RepPointsHead(AnchorFreeHead):
    method __init__ (line 32) | def __init__(self,
    method _init_layers (line 97) | def _init_layers(self):
    method init_weights (line 140) | def init_weights(self):
    method points2bbox (line 154) | def points2bbox(self, pts, y_first=True):
    method gen_grid_from_reg (line 213) | def gen_grid_from_reg(self, reg, previous_boxes):
    method forward (line 247) | def forward(self, feats):
    method forward_single (line 250) | def forward_single(self, x):
    method get_points (line 292) | def get_points(self, featmap_sizes, img_metas):
    method centers_to_bboxes (line 331) | def centers_to_bboxes(self, point_list):
    method offset_to_pts (line 345) | def offset_to_pts(self, center_list, pred_list):
    method _point_target_single (line 366) | def _point_target_single(self,
    method get_targets (line 430) | def get_targets(self,
    method loss_single (line 514) | def loss_single(self, cls_score, pts_pred_init, pts_pred_refine,
    method loss (line 551) | def loss(self,
    method get_bboxes (line 634) | def get_bboxes(self,
    method _get_bboxes_single (line 667) | def _get_bboxes_single(self,
    method get_num_level_proposals_inside (line 714) | def get_num_level_proposals_inside(self, num_level_proposals, inside_f...

FILE: code/mmdet/models/dense_heads/reppoints_v2_head.py
  class RepPointsV2Head (line 15) | class RepPointsV2Head(AnchorFreeHead):
    method __init__ (line 33) | def __init__(self,
    method _init_layers (line 118) | def _init_layers(self):
    method init_weights (line 193) | def init_weights(self):
    method points2bbox (line 214) | def points2bbox(self, pts, y_first=True):
    method gen_grid_from_reg (line 273) | def gen_grid_from_reg(self, reg, previous_boxes):
    method forward (line 307) | def forward(self, feats):
    method forward_single (line 310) | def forward_single(self, x):
    method get_points (line 378) | def get_points(self, featmap_sizes, img_metas):
    method centers_to_bboxes (line 417) | def centers_to_bboxes(self, point_list):
    method offset_to_pts (line 431) | def offset_to_pts(self, center_list, pred_list):
    method _point_target_single (line 452) | def _point_target_single(self,
    method get_targets (line 516) | def get_targets(self,
    method _hm_target_single (line 600) | def _hm_target_single(self,
    method get_hm_targets (line 646) | def get_hm_targets(self,
    method loss_single (line 711) | def loss_single(self, cls_score, pts_pred_init, pts_pred_refine, hm_sc...
    method loss (line 788) | def loss(self,
    method get_bboxes (line 925) | def get_bboxes(self,
    method _get_bboxes_single (line 967) | def _get_bboxes_single(self,
    method get_num_level_proposals_inside (line 1058) | def get_num_level_proposals_inside(self, num_level_proposals, inside_f...

FILE: code/mmdet/models/dense_heads/retina_head.py
  class RetinaHead (line 9) | class RetinaHead(AnchorHead):
    method __init__ (line 28) | def __init__(self,
    method _init_layers (line 50) | def _init_layers(self):
    method init_weights (line 83) | def init_weights(self):
    method forward_single (line 93) | def forward_single(self, x):

FILE: code/mmdet/models/dense_heads/retina_sepbn_head.py
  class RetinaSepBNHead (line 9) | class RetinaSepBNHead(AnchorHead):
    method __init__ (line 17) | def __init__(self,
    method _init_layers (line 32) | def _init_layers(self):
    method init_weights (line 74) | def init_weights(self):
    method forward (line 84) | def forward(self, feats):

FILE: code/mmdet/models/dense_heads/rpn_head.py
  class RPNHead (line 13) | class RPNHead(RPNTestMixin, AnchorHead):
    method __init__ (line 20) | def __init__(self, in_channels, **kwargs):
    method _init_layers (line 24) | def _init_layers(self):
    method init_weights (line 32) | def init_weights(self):
    method forward_single (line 38) | def forward_single(self, x):
    method loss (line 46) | def loss(self,
    method _get_bboxes_single (line 79) | def _get_bboxes_single(self,

FILE: code/mmdet/models/dense_heads/rpn_test_mixin.py
  class RPNTestMixin (line 9) | class RPNTestMixin(object):
    method async_simple_test_rpn (line 14) | async def async_simple_test_rpn(self, x, img_metas):
    method simple_test_rpn (line 25) | def simple_test_rpn(self, x, img_metas):
    method aug_test_rpn (line 40) | def aug_test_rpn(self, feats, img_metas):

FILE: code/mmdet/models/dense_heads/ssd_head.py
  class SSDHead (line 15) | class SSDHead(AnchorHead):
    method __init__ (line 33) | def __init__(self,
    method init_weights (line 98) | def init_weights(self):
    method forward (line 104) | def forward(self, feats):
    method loss_single (line 128) | def loss_single(self, cls_score, bbox_pred, anchor, labels, label_weig...
    method loss (line 182) | def loss(self,

FILE: code/mmdet/models/detectors/atss.py
  class ATSS (line 6) | class ATSS(SingleStageDetector):
    method __init__ (line 8) | def __init__(self,

FILE: code/mmdet/models/detectors/base.py
  class BaseDetector (line 16) | class BaseDetector(nn.Module, metaclass=ABCMeta):
    method __init__ (line 19) | def __init__(self):
    method with_neck (line 24) | def with_neck(self):
    method with_shared_head (line 31) | def with_shared_head(self):
    method with_bbox (line 37) | def with_bbox(self):
    method with_mask (line 44) | def with_mask(self):
    method extract_feat (line 51) | def extract_feat(self, imgs):
    method extract_feats (line 55) | def extract_feats(self, imgs):
    method forward_train (line 69) | def forward_train(self, imgs, img_metas, **kwargs):
    method async_simple_test (line 83) | async def async_simple_test(self, img, img_metas, **kwargs):
    method simple_test (line 87) | def simple_test(self, img, img_metas, **kwargs):
    method aug_test (line 91) | def aug_test(self, imgs, img_metas, **kwargs):
    method init_weights (line 95) | def init_weights(self, pretrained=None):
    method aforward_test (line 106) | async def aforward_test(self, *, img, img_metas, **kwargs):
    method forward_test (line 124) | def forward_test(self, imgs, img_metas, **kwargs):
    method forward (line 162) | def forward(self, img, img_metas, return_loss=True, **kwargs):
    method _parse_losses (line 176) | def _parse_losses(self, losses):
    method train_step (line 211) | def train_step(self, data, optimizer):
    method val_step (line 245) | def val_step(self, data, optimizer):
    method show_result (line 260) | def show_result(self,

FILE: code/mmdet/models/detectors/cascade_rcnn.py
  class CascadeRCNN (line 6) | class CascadeRCNN(TwoStageDetector):
    method __init__ (line 10) | def __init__(self,
    method show_result (line 27) | def show_result(self, data, result, **kwargs):

FILE: code/mmdet/models/detectors/dense_reppoints_detector.py
  class DenseRepPointsDetector (line 12) | class DenseRepPointsDetector(SingleStageDetector):
    method __init__ (line 14) | def __init__(self,
    method with_mask (line 24) | def with_mask(self):
    method forward_train (line 27) | def forward_train(self,
    method simple_test (line 41) | def simple_test(self, img, img_meta, rescale=False):
    method get_seg_masks (line 67) | def get_seg_masks(self, pts_score, det_pts, det_bboxes, det_labels,
  function pts2result (line 130) | def pts2result(pts, labels, num_classes):

FILE: code/mmdet/models/detectors/dense_reppoints_v2_detector.py
  class DenseRepPointsV2Detector (line 12) | class DenseRepPointsV2Detector(SingleStageDetector):
    method __init__ (line 14) | def __init__(self,
    method with_mask (line 24) | def with_mask(self):
    method forward_train (line 27) | def forward_train(self,
    method simple_test (line 43) | def simple_test(self, img, img_meta, rescale=False):
    method get_seg_masks (line 69) | def get_seg_masks(self, pts_score, det_pts, det_bboxes, det_labels, de...
  function pts2result (line 142) | def pts2result(pts, labels, num_classes):

FILE: code/mmdet/models/detectors/fast_rcnn.py
  class FastRCNN (line 6) | class FastRCNN(TwoStageDetector):
    method __init__ (line 9) | def __init__(self,
    method forward_test (line 24) | def forward_test(self, imgs, img_metas, proposals, **kwargs):

FILE: code/mmdet/models/detectors/faster_rcnn.py
  class FasterRCNN (line 6) | class FasterRCNN(TwoStageDetector):
    method __init__ (line 9) | def __init__(self,

FILE: code/mmdet/models/detectors/fcos.py
  class FCOS (line 6) | class FCOS(SingleStageDetector):
    method __init__ (line 9) | def __init__(self,

FILE: code/mmdet/models/detectors/fovea.py
  class FOVEA (line 6) | class FOVEA(SingleStageDetector):
    method __init__ (line 9) | def __init__(self,

FILE: code/mmdet/models/detectors/fsaf.py
  class FSAF (line 6) | class FSAF(SingleStageDetector):
    method __init__ (line 9) | def __init__(self,

FILE: code/mmdet/models/detectors/gfl.py
  class GFL (line 6) | class GFL(SingleStageDetector):
    method __init__ (line 8) | def __init__(self,

FILE: code/mmdet/models/detectors/grid_rcnn.py
  class GridRCNN (line 6) | class GridRCNN(TwoStageDetector):
    method __init__ (line 14) | def __init__(self,

FILE: code/mmdet/models/detectors/htc.py
  class HybridTaskCascade (line 6) | class HybridTaskCascade(CascadeRCNN):
    method __init__ (line 9) | def __init__(self, **kwargs):
    method with_semantic (line 13) | def with_semantic(self):

FILE: code/mmdet/models/detectors/lscpvnet.py
  class LSCPVDetector (line 11) | class LSCPVDetector(SingleStageDetector):
    method __init__ (line 13) | def __init__(self,
    method forward_train (line 23) | def forward_train(self,
    method simple_test (line 39) | def simple_test(self, img, img_metas, rescale=False, show=False, out_d...
    method merge_aug_results (line 61) | def merge_aug_results(self, aug_bboxes, aug_scores, img_metas):
    method aug_test_simple (line 88) | def aug_test_simple(self, imgs, img_metas, rescale=False):
    method merge_aug_vote_results (line 131) | def merge_aug_vote_results(self, aug_bboxes, aug_labels, img_metas):
    method remove_boxes (line 157) | def remove_boxes(self, boxes, min_scale, max_scale):
    method bboxes_vote (line 164) | def bboxes_vote(self, boxes, scores, vote_thresh=0.66):
    method aug_test_vote (line 230) | def aug_test_vote(self, imgs, img_metas, rescale=False):
    method aug_test (line 293) | def aug_test(self, imgs, img_metas, rescale=False):

FILE: code/mmdet/models/detectors/lsnet.py
  class LSDetector (line 13) | class LSDetector(SingleStageDetector):
    method __init__ (line 14) | def __init__(self,
    method merge_aug_results (line 27) | def merge_aug_results(self, aug_bboxes, aug_scores, img_metas):
    method forward_train (line 44) | def forward_train(self,
    method simple_test (line 58) | def simple_test(self, img, img_metas, rescale=False, show=False, out_d...
    method aug_test_simple (line 102) | def aug_test_simple(self, imgs, img_metas, rescale=False):
    method merge_aug_vote_results (line 137) | def merge_aug_vote_results(self, aug_bboxes, aug_vectors, aug_labels, ...
    method remove_boxes (line 156) | def remove_boxes(self, boxes, min_scale, max_scale):
    method bboxes_vote (line 163) | def bboxes_vote(self, boxes, scores, vote_thresh=0.66):
    method instances_vote (line 229) | def instances_vote(self, boxes, vectors, scores, vote_thresh=0.66):
    method aug_test_vote (line 301) | def aug_test_vote(self, imgs, img_metas, rescale=False, show=False, ou...
    method aug_test (line 403) | def aug_test(self, imgs, img_metas, rescale=False, show=False, out_dir...
    method show_result (line 411) | def show_result(self,

FILE: code/mmdet/models/detectors/mask_rcnn.py
  class MaskRCNN (line 6) | class MaskRCNN(TwoStageDetector):
    method __init__ (line 9) | def __init__(self,

FILE: code/mmdet/models/detectors/mask_scoring_rcnn.py
  class MaskScoringRCNN (line 6) | class MaskScoringRCNN(TwoStageDetector):
    method __init__ (line 12) | def __init__(self,

FILE: code/mmdet/models/detectors/nasfcos.py
  class NASFCOS (line 6) | class NASFCOS(SingleStageDetector):
    method __init__ (line 12) | def __init__(self,

FILE: code/mmdet/models/detectors/point_rend.py
  class PointRend (line 6) | class PointRend(TwoStageDetector):
    method __init__ (line 14) | def __init__(self,

FILE: code/mmdet/models/detectors/reppoints_detector.py
  class RepPointsDetector (line 9) | class RepPointsDetector(SingleStageDetector):
    method __init__ (line 16) | def __init__(self,
    method merge_aug_results (line 27) | def merge_aug_results(self, aug_bboxes, aug_scores, img_metas):
    method aug_test (line 54) | def aug_test(self, imgs, img_metas, rescale=False):

FILE: code/mmdet/models/detectors/reppoints_v2_detector.py
  class RepPointsV2Detector (line 11) | class RepPointsV2Detector(SingleStageDetector):
    method __init__ (line 13) | def __init__(self,
    method forward_train (line 23) | def forward_train(self,
    method merge_aug_results (line 38) | def merge_aug_results(self, aug_bboxes, aug_scores, img_metas):
    method aug_test_simple (line 65) | def aug_test_simple(self, imgs, img_metas, rescale=False):
    method merge_aug_vote_results (line 108) | def merge_aug_vote_results(self, aug_bboxes, aug_labels, img_metas):
    method remove_boxes (line 134) | def remove_boxes(self, boxes, min_scale, max_scale):
    method bboxes_vote (line 140) | def bboxes_vote(self, boxes, scores, vote_thresh=0.66):
    method aug_test_vote (line 206) | def aug_test_vote(self, imgs, img_metas, rescale=False):
    method aug_test (line 267) | def aug_test(self, imgs, img_metas, rescale=False):

FILE: code/mmdet/models/detectors/retinanet.py
  class RetinaNet (line 6) | class RetinaNet(SingleStageDetector):
    method __init__ (line 9) | def __init__(self,

FILE: code/mmdet/models/detectors/rpn.py
  class RPN (line 9) | class RPN(BaseDetector):
    method __init__ (line 12) | def __init__(self,
    method init_weights (line 30) | def init_weights(self, pretrained=None):
    method extract_feat (line 43) | def extract_feat(self, img):
    method forward_dummy (line 58) | def forward_dummy(self, img):
    method forward_train (line 64) | def forward_train(self,
    method simple_test (line 94) | def simple_test(self, img, img_metas, rescale=False):
    method aug_test (line 115) | def aug_test(self, imgs, img_metas, rescale=False):
    method show_result (line 141) | def show_result(self, data, result, dataset=None, top_k=20):

FILE: code/mmdet/models/detectors/single_stage.py
  class SingleStageDetector (line 9) | class SingleStageDetector(BaseDetector):
    method __init__ (line 16) | def __init__(self,
    method init_weights (line 34) | def init_weights(self, pretrained=None):
    method extract_feat (line 51) | def extract_feat(self, img):
    method forward_dummy (line 59) | def forward_dummy(self, img):
    method forward_train (line 68) | def forward_train(self,
    method simple_test (line 97) | def simple_test(self, img, img_metas, rescale=False):
    method aug_test (line 119) | def aug_test(self, imgs, img_metas, rescale=False):

FILE: code/mmdet/models/detectors/two_stage.py
  class TwoStageDetector (line 10) | class TwoStageDetector(BaseDetector):
    method __init__ (line 17) | def __init__(self,
    method with_rpn (line 51) | def with_rpn(self):
    method with_roi_head (line 56) | def with_roi_head(self):
    method init_weights (line 60) | def init_weights(self, pretrained=None):
    method extract_feat (line 80) | def extract_feat(self, img):
    method forward_dummy (line 88) | def forward_dummy(self, img):
    method forward_train (line 106) | def forward_train(self,
    method async_simple_test (line 170) | async def async_simple_test(self,
    method simple_test (line 188) | def simple_test(self, img, img_metas, proposals=None, rescale=False):
    method aug_test (line 202) | def aug_test(self, imgs, img_metas, rescale=False):

FILE: code/mmdet/models/losses/accuracy.py
  function accuracy (line 4) | def accuracy(pred, target, topk=1):
  class Accuracy (line 40) | class Accuracy(nn.Module):
    method __init__ (line 42) | def __init__(self, topk=(1, )):
    method forward (line 52) | def forward(self, pred, target):

FILE: code/mmdet/models/losses/ae_loss.py
  function ae_loss_per_image (line 8) | def ae_loss_per_image(tl_preds, br_preds, match):
  class AssociativeEmbeddingLoss (line 70) | class AssociativeEmbeddingLoss(nn.Module):
    method __init__ (line 83) | def __init__(self, pull_weight=0.25, push_weight=0.25):
    method forward (line 88) | def forward(self, pred, target, match):

FILE: code/mmdet/models/losses/balanced_l1_loss.py
  function balanced_l1_loss (line 10) | def balanced_l1_loss(pred,
  class BalancedL1Loss (line 51) | class BalancedL1Loss(nn.Module):
    method __init__ (line 69) | def __init__(self,
    method forward (line 82) | def forward(self,

FILE: code/mmdet/models/losses/chamfer_loss.py
  class ChamferLoss2D (line 9) | class ChamferLoss2D(nn.Module):
    method __init__ (line 10) | def __init__(self, use_cuda=True, loss_weight=1.0, eps=1e-12):
    method forward (line 16) | def forward(self, point_set_1, point_set_2):
  class ChamferDistancePytorch (line 56) | class ChamferDistancePytorch(nn.Module):
    method __init__ (line 63) | def __init__(self, reduction='none'):
    method forward (line 67) | def forward(self, x, y):
    method _cost_matrix (line 87) | def _cost_matrix(x, y, p=2):

FILE: code/mmdet/models/losses/cross_entropy_loss.py
  function cross_entropy (line 9) | def cross_entropy(pred,
  function _expand_binary_labels (line 42) | def _expand_binary_labels(labels, label_weights, label_channels):
  function binary_cross_entropy (line 58) | def binary_cross_entropy(pred,
  function mask_cross_entropy (line 94) | def mask_cross_entropy(pred,
  class CrossEntropyLoss (line 129) | class CrossEntropyLoss(nn.Module):
    method __init__ (line 131) | def __init__(self,
    method forward (line 165) | def forward(self,

FILE: code/mmdet/models/losses/cross_iou_loss.py
  function get_bbox_from_extreme (line 10) | def get_bbox_from_extreme(pred, anchor_pts):
  function get_bbox_from_polygon (line 35) | def get_bbox_from_polygon(pred, anchor_pts):
  function cross_iou_loss (line 62) | def cross_iou_loss(pred, target, loss_type=None, anchor_pts=None, vs=None,
  class CrossIOULoss (line 135) | class CrossIOULoss(nn.Module):
    method __init__ (line 137) | def __init__(self, eps=1e-6, reduction='mean', loss_weight=1.0, loss_t...
    method forward (line 146) | def forward(self,

FILE: code/mmdet/models/losses/focal_loss.py
  function py_sigmoid_focal_loss (line 11) | def py_sigmoid_focal_loss(pred,
  function separate_sigmoid_focal_loss (line 45) | def separate_sigmoid_focal_loss(pred,
  function sigmoid_focal_loss (line 74) | def sigmoid_focal_loss(pred,
  class FocalLoss (line 120) | class FocalLoss(nn.Module):
    method __init__ (line 122) | def __init__(self,
    method forward (line 150) | def forward(self,
  class SEPFocalLoss (line 190) | class SEPFocalLoss(nn.Module):
    method __init__ (line 192) | def __init__(self,
    method forward (line 203) | def forward(self,

FILE: code/mmdet/models/losses/gaussian_focal_loss.py
  function gaussian_focal_loss (line 8) | def gaussian_focal_loss(pred, gaussian_target, alpha=2.0, gamma=4.0):
  class GaussianFocalLoss (line 30) | class GaussianFocalLoss(nn.Module):
    method __init__ (line 47) | def __init__(self,
    method forward (line 58) | def forward(self,

FILE: code/mmdet/models/losses/gfocal_loss.py
  function quality_focal_loss (line 9) | def quality_focal_loss(pred, target, beta=2.0):
  function distribution_focal_loss (line 54) | def distribution_focal_loss(pred, label):
  class QualityFocalLoss (line 80) | class QualityFocalLoss(nn.Module):
    method __init__ (line 95) | def __init__(self,
    method forward (line 107) | def forward(self,
  class DistributionFocalLoss (line 146) | class DistributionFocalLoss(nn.Module):
    method __init__ (line 157) | def __init__(self, reduction='mean', loss_weight=1.0):
    method forward (line 162) | def forward(self,

FILE: code/mmdet/models/losses/ghm_loss.py
  function _expand_onehot_labels (line 8) | def _expand_onehot_labels(labels, label_weights, label_channels):
  class GHMC (line 21) | class GHMC(nn.Module):
    method __init__ (line 35) | def __init__(self, bins=10, momentum=0, use_sigmoid=True, loss_weight=...
    method forward (line 50) | def forward(self, pred, target, label_weight, *args, **kwargs):
  class GHMR (line 99) | class GHMR(nn.Module):
    method __init__ (line 113) | def __init__(self, mu=0.02, bins=10, momentum=0, loss_weight=1.0):
    method forward (line 127) | def forward(self, pred, target, label_weight, avg_factor=None):

FILE: code/mmdet/models/losses/iou_loss.py
  function iou_loss (line 12) | def iou_loss(pred, target, eps=1e-6):
  function bounded_iou_loss (line 32) | def bounded_iou_loss(pred, target, beta=0.2, eps=1e-3):
  function giou_loss (line 74) | def giou_loss(pred, target, eps=1e-7):
  function diou_loss (line 119) | def diou_loss(pred, target, eps=1e-7):
  function ciou_loss (line 171) | def ciou_loss(pred, target, eps=1e-7):
  class IoULoss (line 230) | class IoULoss(nn.Module):
    method __init__ (line 241) | def __init__(self, eps=1e-6, reduction='mean', loss_weight=1.0):
    method forward (line 247) | def forward(self,
  class BoundedIoULoss (line 291) | class BoundedIoULoss(nn.Module):
    method __init__ (line 293) | def __init__(self, beta=0.2, eps=1e-3, reduction='mean', loss_weight=1...
    method forward (line 300) | def forward(self,
  class GIoULoss (line 325) | class GIoULoss(nn.Module):
    method __init__ (line 327) | def __init__(self, eps=1e-6, reduction='mean', loss_weight=1.0):
    method forward (line 333) | def forward(self,
  class DIoULoss (line 362) | class DIoULoss(nn.Module):
    method __init__ (line 364) | def __init__(self, eps=1e-6, reduction='mean', loss_weight=1.0):
    method forward (line 370) | def forward(self,
  class CIoULoss (line 400) | class CIoULoss(nn.Module):
    method __init__ (line 402) | def __init__(self, eps=1e-6, reduction='mean', loss_weight=1.0):
    method forward (line 408) | def forward(self,

FILE: code/mmdet/models/losses/mse_loss.py
  function mse_loss (line 9) | def mse_loss(pred, target):
  class MSELoss (line 15) | class MSELoss(nn.Module):
    method __init__ (line 24) | def __init__(self, reduction='mean', loss_weight=1.0):
    method forward (line 29) | def forward(self, pred, target, weight=None, avg_factor=None):

FILE: code/mmdet/models/losses/pisa_loss.py
  function isr_p (line 6) | def isr_p(cls_score,
  function carl_loss (line 119) | def carl_loss(cls_score,

FILE: code/mmdet/models/losses/smooth_l1_loss.py
  function smooth_l1_loss (line 9) | def smooth_l1_loss(pred, target, beta=1.0):
  function l1_loss (line 30) | def l1_loss(pred, target):
  class SmoothL1Loss (line 46) | class SmoothL1Loss(nn.Module):
    method __init__ (line 57) | def __init__(self, beta=1.0, reduction='mean', loss_weight=1.0):
    method forward (line 63) | def forward(self,
  class L1Loss (line 98) | class L1Loss(nn.Module):
    method __init__ (line 107) | def __init__(self, reduction='mean', loss_weight=1.0):
    method forward (line 112) | def forward(self,

FILE: code/mmdet/models/losses/utils.py
  function reduce_loss (line 6) | def reduce_loss(loss, reduction):
  function weight_reduce_loss (line 26) | def weight_reduce_loss(loss, weight=None, reduction='mean', avg_factor=N...
  function weighted_loss (line 55) | def weighted_loss(loss_func):

FILE: code/mmdet/models/necks/bfp.py
  class BFP (line 10) | class BFP(nn.Module):
    method __init__ (line 30) | def __init__(self,
    method init_weights (line 65) | def init_weights(self):
    method forward (line 71) | def forward(self, inputs):

FILE: code/mmdet/models/necks/fpn.py
  class FPN (line 10) | class FPN(nn.Module):
    method __init__ (line 65) | def __init__(self,
    method init_weights (line 159) | def init_weights(self):
    method forward (line 166) | def forward(self, inputs):

FILE: code/mmdet/models/necks/fpn_carafe.py
  class FPN_CARAFE (line 9) | class FPN_CARAFE(nn.Module):
    method __init__ (line 33) | def __init__(self,
    method init_weights (line 202) | def init_weights(self):
    method slice_as (line 211) | def slice_as(self, src, dst):
    method tensor_add (line 231) | def tensor_add(self, a, b):
    method forward (line 239) | def forward(self, inputs):

FILE: code/mmdet/models/necks/hrfpn.py
  class HRFPN (line 11) | class HRFPN(nn.Module):
    method __init__ (line 29) | def __init__(self,
    method init_weights (line 72) | def init_weights(self):
    method forward (line 78) | def forward(self, inputs):

FILE: code/mmdet/models/necks/nas_fpn.py
  class NASFPN (line 9) | class NASFPN(nn.Module):
    method __init__ (line 30) | def __init__(self,
    method init_weights (line 123) | def init_weights(self):
    method forward (line 129) | def forward(self, inputs):

FILE: code/mmdet/models/necks/nasfcos_fpn.py
  class NASFCOS_FPN (line 10) | class NASFCOS_FPN(nn.Module):
    method __init__ (line 31) | def __init__(self,
    method forward (line 115) | def forward(self, inputs):
    method init_weights (line 149) | def init_weights(self):

FILE: code/mmdet/models/necks/pafpn.py
  class PAFPN (line 11) | class PAFPN(FPN):
    method __init__ (line 39) | def __init__(self,
    method forward (line 84) | def forward(self, inputs):

FILE: code/mmdet/models/necks/rfp.py
  class ASPP (line 10) | class ASPP(nn.Module):
    method __init__ (line 23) | def __init__(self, in_channels, out_channels, dilations=(1, 3, 6, 1)):
    method init_weights (line 42) | def init_weights(self):
    method forward (line 47) | def forward(self, x):
  class RFP (line 59) | class RFP(FPN):
    method __init__ (line 75) | def __init__(self,
    method init_weights (line 97) | def init_weights(self):
    method forward (line 104) | def forward(self, inputs):

FILE: code/mmdet/models/roi_heads/base_roi_head.py
  class BaseRoIHead (line 8) | class BaseRoIHead(nn.Module, metaclass=ABCMeta):
    method __init__ (line 11) | def __init__(self,
    method with_bbox (line 34) | def with_bbox(self):
    method with_mask (line 39) | def with_mask(self):
    method with_shared_head (line 44) | def with_shared_head(self):
    method init_weights (line 49) | def init_weights(self, pretrained):
    method init_bbox_head (line 59) | def init_bbox_head(self):
    method init_mask_head (line 64) | def init_mask_head(self):
    method init_assigner_sampler (line 69) | def init_assigner_sampler(self):
    method forward_train (line 74) | def forward_train(self,
    method async_simple_test (line 86) | async def async_simple_test(self, x, img_meta, **kwargs):
    method simple_test (line 90) | def simple_test(self,
    method aug_test (line 100) | def aug_test(self, x, proposal_list, img_metas, rescale=False, **kwargs):

FILE: code/mmdet/models/roi_heads/bbox_heads/bbox_head.py
  class BBoxHead (line 13) | class BBoxHead(nn.Module):
    method __init__ (line 17) | def __init__(self,
    method init_weights (line 66) | def init_weights(self):
    method forward (line 76) | def forward(self, x):
    method _get_target_single (line 84) | def _get_target_single(self, pos_bboxes, neg_bboxes, pos_gt_bboxes,
    method get_targets (line 115) | def get_targets(self,
    method loss (line 141) | def loss(self,
    method get_bboxes (line 188) | def get_bboxes(self,
    method refine_bboxes (line 227) | def refine_bboxes(self, rois, labels, bbox_preds, pos_is_gts, img_metas):
    method regress_by_class (line 306) | def regress_by_class(self, rois, label, bbox_pred, img_meta):

FILE: code/mmdet/models/roi_heads/bbox_heads/convfc_bbox_head.py
  class ConvFCBBoxHead (line 9) | class ConvFCBBoxHead(BBoxHead):
    method __init__ (line 20) | def __init__(self,
    method _add_conv_fc_branch (line 85) | def _add_conv_fc_branch(self,
    method init_weights (line 126) | def init_weights(self):
    method forward (line 135) | def forward(self, x):
  class Shared2FCBBoxHead (line 177) | class Shared2FCBBoxHead(ConvFCBBoxHead):
    method __init__ (line 179) | def __init__(self, fc_out_channels=1024, *args, **kwargs):
  class Shared4Conv1FCBBoxHead (line 193) | class Shared4Conv1FCBBoxHead(ConvFCBBoxHead):
    method __init__ (line 195) | def __init__(self, fc_out_channels=1024, *args, **kwargs):

FILE: code/mmdet/models/roi_heads/bbox_heads/double_bbox_head.py
  class BasicResBlock (line 9) | class BasicResBlock(nn.Module):
    method __init__ (line 22) | def __init__(self,
    method forward (line 58) | def forward(self, x):
  class DoubleConvFCBBoxHead (line 72) | class DoubleConvFCBBoxHead(BBoxHead):
    method __init__ (line 86) | def __init__(self,
    method _add_conv_branch (line 121) | def _add_conv_branch(self):
    method _add_fc_branch (line 133) | def _add_fc_branch(self):
    method init_weights (line 143) | def init_weights(self):
    method forward (line 152) | def forward(self, x_cls, x_reg):

FILE: code/mmdet/models/roi_heads/cascade_roi_head.py
  class CascadeRoIHead (line 13) | class CascadeRoIHead(BaseRoIHead, BBoxTestMixin, MaskTestMixin):
    method __init__ (line 19) | def __init__(self,
    method init_bbox_head (line 44) | def init_bbox_head(self, bbox_roi_extractor, bbox_head):
    method init_mask_head (line 64) | def init_mask_head(self, mask_roi_extractor, mask_head):
    method init_assigner_sampler (line 92) | def init_assigner_sampler(self):
    method init_weights (line 102) | def init_weights(self, pretrained):
    method forward_dummy (line 120) | def forward_dummy(self, x, proposals):
    method _bbox_forward (line 138) | def _bbox_forward(self, stage, x, rois):
    method _bbox_forward_train (line 151) | def _bbox_forward_train(self, stage, x, sampling_results, gt_bboxes,
    method _mask_forward (line 166) | def _mask_forward(self, stage, x, rois):
    method _mask_forward_train (line 178) | def _mask_forward_train(self,
    method forward_train (line 202) | def forward_train(self,
    method simple_test (line 289) | def simple_test(self, x, proposal_list, img_metas, rescale=False):
    method aug_test (line 355) | def aug_test(self, features, proposal_list, img_metas, rescale=False):

FILE: code/mmdet/models/roi_heads/double_roi_head.py
  class DoubleHeadRoIHead (line 6) | class DoubleHeadRoIHead(StandardRoIHead):
    method __init__ (line 12) | def __init__(self, reg_roi_scale_factor, **kwargs):
    method _bbox_forward (line 16) | def _bbox_forward(self, x, rois):

FILE: code/mmdet/models/roi_heads/dynamic_roi_head.py
  class DynamicRoIHead (line 11) | class DynamicRoIHead(StandardRoIHead):
    method __init__ (line 14) | def __init__(self, **kwargs):
    method forward_train (line 22) | def forward_train(self,
    method _bbox_forward_train (line 107) | def _bbox_forward_train(self, x, sampling_results, gt_bboxes, gt_labels,
    method update_hyperparameters (line 132) | def update_hyperparameters(self):

FILE: code/mmdet/models/roi_heads/grid_roi_head.py
  class GridRoIHead (line 9) | class GridRoIHead(StandardRoIHead):
    method __init__ (line 15) | def __init__(self, grid_roi_extractor, grid_head, **kwargs):
    method init_weights (line 26) | def init_weights(self, pretrained):
    method _random_jitter (line 38) | def _random_jitter(self, sampling_results, img_metas, amplitude=0.15):
    method forward_dummy (line 63) | def forward_dummy(self, x, proposals):
    method _bbox_forward_train (line 89) | def _bbox_forward_train(self, x, sampling_results, gt_bboxes, gt_labels,
    method simple_test (line 127) | def simple_test(self,

FILE: code/mmdet/models/roi_heads/htc_roi_head.py
  class HybridTaskCascadeRoIHead (line 11) | class HybridTaskCascadeRoIHead(CascadeRoIHead):
    method __init__ (line 17) | def __init__(self,
    method init_weights (line 40) | def init_weights(self, pretrained):
    method with_semantic (line 52) | def with_semantic(self):
    method forward_dummy (line 59) | def forward_dummy(self, x, proposals):
    method _bbox_forward_train (line 94) | def _bbox_forward_train(self,
    method _mask_forward_train (line 121) | def _mask_forward_train(self,
    method _bbox_forward (line 165) | def _bbox_forward(self, stage, x, rois, semantic_feat=None):
    method _mask_forward_test (line 183) | def _mask_forward_test(self, stage, x, bboxes, semantic_feat=None):
    method forward_train (line 212) | def forward_train(self,
    method simple_test (line 337) | def simple_test(self, x, proposal_list, img_metas, rescale=False):
    method aug_test (line 421) | def aug_test(self, img_feats, proposal_list, img_metas, rescale=False):

FILE: code/mmdet/models/roi_heads/mask_heads/coarse_mask_head.py
  class CoarseMaskHead (line 10) | class CoarseMaskHead(FCNMaskHead):
    method __init__ (line 25) | def __init__(self,
    method init_weights (line 72) | def init_weights(self):
    method forward (line 79) | def forward(self, x):

FILE: code/mmdet/models/roi_heads/mask_heads/fcn_mask_head.py
  class FCNMaskHead (line 20) | class FCNMaskHead(nn.Module):
    method __init__ (line 22) | def __init__(self,
    method init_weights (line 106) | def init_weights(self):
    method forward (line 118) | def forward(self, x):
    method get_targets (line 128) | def get_targets(self, sampling_results, gt_masks, rcnn_train_cfg):
    method loss (line 138) | def loss(self, mask_pred, mask_targets, labels):
    method get_seg_masks (line 151) | def get_seg_masks(self, mask_pred, det_bboxes, det_labels, rcnn_test_cfg,
  function _do_paste_mask (line 240) | def _do_paste_mask(masks, boxes, img_h, img_w, skip_empty=True):

FILE: code/mmdet/models/roi_heads/mask_heads/fused_semantic_head.py
  class FusedSemanticHead (line 10) | class FusedSemanticHead(nn.Module):
    method __init__ (line 26) | def __init__(self,
    method init_weights (line 82) | def init_weights(self):
    method forward (line 86) | def forward(self, feats):
    method loss (line 103) | def loss(self, mask_pred, labels):

FILE: code/mmdet/models/roi_heads/mask_heads/grid_head.py
  class GridHead (line 11) | class GridHead(nn.Module):
    method __init__ (line 13) | def __init__(self,
    method init_weights (line 141) | def init_weights(self):
    method forward (line 151) | def forward(self, x):
    method calc_sub_regions (line 189) | def calc_sub_regions(self):
    method get_targets (line 220) | def get_targets(self, sampling_results, rcnn_train_cfg):
    method loss (line 288) | def loss(self, grid_pred, grid_targets):
    method get_bboxes (line 294) | def get_bboxes(self, det_bboxes, grid_pred, img_metas):

FILE: code/mmdet/models/roi_heads/mask_heads/htc_mask_head.py
  class HTCMaskHead (line 8) | class HTCMaskHead(FCNMaskHead):
    method __init__ (line 10) | def __init__(self, with_conv_res=True, *args, **kwargs):
    method init_weights (line 21) | def init_weights(self):
    method forward (line 26) | def forward(self, x, res_feat=None, return_logits=True, return_feat=Tr...

FILE: code/mmdet/models/roi_heads/mask_heads/mask_point_head.py
  class MaskPointHead (line 12) | class MaskPointHead(nn.Module):
    method __init__ (line 37) | def __init__(self,
    method init_weights (line 80) | def init_weights(self):
    method forward (line 85) | def forward(self, fine_grained_feats, coarse_feats):
    method get_targets (line 106) | def get_targets(self, rois, rel_roi_points, sampling_results, gt_masks,
    method _get_target_single (line 146) | def _get_target_single(self, rois, rel_roi_points, pos_assigned_gt_inds,
    method loss (line 164) | def loss(self, point_pred, point_targets, labels):
    method _get_uncertainty (line 187) | def _get_uncertainty(self, mask_pred, labels):
    method get_roi_rel_points_train (line 212) | def get_roi_rel_points_train(self, mask_pred, labels, cfg):
    method get_roi_rel_points_test (line 267) | def get_roi_rel_points_test(self, mask_pred, pred_label, cfg):

FILE: code/mmdet/models/roi_heads/mask_heads/maskiou_head.py
  class MaskIoUHead (line 13) | class MaskIoUHead(nn.Module):
    method __init__ (line 19) | def __init__(self,
    method init_weights (line 65) | def init_weights(self):
    method forward (line 77) | def forward(self, mask_feat, mask_pred):
    method loss (line 92) | def loss(self, mask_iou_pred, mask_iou_targets):
    method get_targets (line 102) | def get_targets(self, sampling_results, gt_masks, mask_pred, mask_targ...
    method _get_area_ratio (line 151) | def _get_area_ratio(self, pos_proposals, pos_assigned_gt_inds, gt_masks):
    method get_mask_scores (line 178) | def get_mask_scores(self, mask_iou_pred, det_bboxes, det_labels):

FILE: code/mmdet/models/roi_heads/mask_scoring_roi_head.py
  class MaskScoringRoIHead (line 9) | class MaskScoringRoIHead(StandardRoIHead):
    method __init__ (line 15) | def __init__(self, mask_iou_head, **kwargs):
    method init_weights (line 20) | def init_weights(self, pretrained):
    method _mask_forward_train (line 30) | def _mask_forward_train(self, x, sampling_results, bbox_feats, gt_masks,
    method simple_test_mask (line 57) | def simple_test_mask(self,

FILE: code/mmdet/models/roi_heads/pisa_roi_head.py
  class PISARoIHead (line 8) | class PISARoIHead(StandardRoIHead):
    method forward_train (line 10) | def forward_train(self,
    method _bbox_forward (line 87) | def _bbox_forward(self, x, rois):
    method _bbox_forward_train (line 100) | def _bbox_forward_train(self,

FILE: code/mmdet/models/roi_heads/point_rend_roi_head.py
  class PointRendRoIHead (line 14) | class PointRendRoIHead(StandardRoIHead):
    method __init__ (line 18) | def __init__(self, point_head, *args, **kwargs):
    method init_point_head (line 23) | def init_point_head(self, point_head):
    method init_weights (line 27) | def init_weights(self, pretrained):
    method _mask_forward_train (line 36) | def _mask_forward_train(self, x, sampling_results, bbox_feats, gt_masks,
    method _mask_point_forward_train (line 51) | def _mask_point_forward_train(self, x, sampling_results, mask_pred,
    method _get_fine_grained_point_feats (line 72) | def _get_fine_grained_point_feats(self, x, rois, rel_roi_points,
    method _mask_point_forward_test (line 97) | def _mask_point_forward_test(self, x, rois, label_pred, mask_pred,
    method simple_test_mask (line 135) | def simple_test_mask(self,
    method aug_test_mask (line 163) | def aug_test_mask(self, feats, img_metas, det_bboxes, det_labels):

FILE: code/mmdet/models/roi_heads/roi_extractors/base_roi_extractor.py
  class BaseRoIExtractor (line 9) | class BaseRoIExtractor(nn.Module, metaclass=ABCMeta):
    method __init__ (line 18) | def __init__(self, roi_layer, out_channels, featmap_strides):
    method num_inputs (line 26) | def num_inputs(self):
    method init_weights (line 30) | def init_weights(self):
    method build_roi_layers (line 33) | def build_roi_layers(self, layer_cfg, featmap_strides):
    method roi_rescale (line 58) | def roi_rescale(self, rois, scale_factor):
    method forward (line 83) | def forward(self, feats, rois, roi_scale_factor=None):

FILE: code/mmdet/models/roi_heads/roi_extractors/generic_roi_extractor.py
  class GenericRoIExtractor (line 8) | class GenericRoIExtractor(BaseRoIExtractor):
    method __init__ (line 23) | def __init__(self,
    method forward (line 42) | def forward(self, feats, rois, roi_scale_factor=None):

FILE: code/mmdet/models/roi_heads/roi_extractors/single_level_roi_extractor.py
  class SingleRoIExtractor (line 9) | class SingleRoIExtractor(BaseRoIExtractor):
    method __init__ (line 23) | def __init__(self,
    method map_roi_levels (line 32) | def map_roi_levels(self, rois, num_levels):
    method forward (line 54) | def forward(self, feats, rois, roi_scale_factor=None):

FILE: code/mmdet/models/roi_heads/shared_heads/res_layer.py
  class ResLayer (line 13) | class ResLayer(nn.Module):
    method __init__ (line 15) | def __init__(self,
    method init_weights (line 48) | def init_weights(self, pretrained=None):
    method forward (line 68) | def forward(self, x):
    method train (line 73) | def train(self, mode=True):

FILE: code/mmdet/models/roi_heads/standard_roi_head.py
  class StandardRoIHead (line 10) | class StandardRoIHead(BaseRoIHead, BBoxTestMixin, MaskTestMixin):
    method init_assigner_sampler (line 14) | def init_assigner_sampler(self):
    method init_bbox_head (line 23) | def init_bbox_head(self, bbox_roi_extractor, bbox_head):
    method init_mask_head (line 28) | def init_mask_head(self, mask_roi_extractor, mask_head):
    method init_weights (line 38) | def init_weights(self, pretrained):
    method forward_dummy (line 55) | def forward_dummy(self, x, proposals):
    method forward_train (line 71) | def forward_train(self,
    method _bbox_forward (line 136) | def _bbox_forward(self, x, rois):
    method _bbox_forward_train (line 149) | def _bbox_forward_train(self, x, sampling_results, gt_bboxes, gt_labels,
    method _mask_forward_train (line 164) | def _mask_forward_train(self, x, sampling_results, bbox_feats, gt_masks,
    method _mask_forward (line 201) | def _mask_forward(self, x, rois=None, pos_inds=None, bbox_feats=None):
    method async_simple_test (line 218) | async def async_simple_test(self,
    method simple_test (line 243) | def simple_test(self,
    method aug_test (line 264) | def aug_test(self, x, proposal_list, img_metas, rescale=False):

FILE: code/mmdet/models/roi_heads/test_mixins.py
  class BBoxTestMixin (line 15) | class BBoxTestMixin(object):
    method async_test_bboxes (line 19) | async def async_test_bboxes(self,
    method simple_test_bboxes (line 52) | def simple_test_bboxes(self,
    method aug_test_bboxes (line 73) | def aug_test_bboxes(self, feats, img_metas, proposal_list, rcnn_test_c...
  class MaskTestMixin (line 109) | class MaskTestMixin(object):
    method async_test_mask (line 113) | async def async_test_mask(self,
    method simple_test_mask (line 151) | def simple_test_mask(self,
    method aug_test_mask (line 178) | def aug_test_mask(self, feats, img_metas, det_bboxes, det_labels):

FILE: code/mmdet/models/utils/res_layer.py
  class ResLayer (line 5) | class ResLayer(nn.Sequential):
    method __init__ (line 24) | def __init__(self,

FILE: code/mmdet/ops/carafe/carafe.py
  class CARAFENaiveFunction (line 11) | class CARAFENaiveFunction(Function):
    method forward (line 14) | def forward(ctx, features, masks, kernel_size, group_size, scale_factor):
    method backward (line 40) | def backward(ctx, grad_output):
  class CARAFENaive (line 60) | class CARAFENaive(Module):
    method __init__ (line 62) | def __init__(self, kernel_size, group_size, scale_factor):
    method forward (line 71) | def forward(self, features, masks):
  class CARAFEFunction (line 76) | class CARAFEFunction(Function):
    method forward (line 79) | def forward(ctx, features, masks, kernel_size, group_size, scale_factor):
    method backward (line 108) | def backward(ctx, grad_output):
  class CARAFE (line 132) | class CARAFE(Module):
    method __init__ (line 146) | def __init__(self, kernel_size, group_size, scale_factor):
    method forward (line 155) | def forward(self, features, masks):
  class CARAFEPack (line 161) | class CARAFEPack(nn.Module):
    method __init__ (line 182) | def __init__(self,
    method init_weights (line 210) | def init_weights(self):
    method kernel_normalizer (line 216) | def kernel_normalizer(self, mask):
    method feature_reassemble (line 227) | def feature_reassemble(self, x, mask):
    method forward (line 231) | def forward(self, x):

FILE: code/mmdet/ops/carafe/src/carafe_ext.cpp
  function carafe_forward (line 21) | int carafe_forward(at::Tensor features, at::Tensor rfeatures,
  function carafe_backward (line 36) | int carafe_backward(at::Tensor top_grad, at::Tensor rfeatures,
  function PYBIND11_MODULE (line 54) | PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {

FILE: code/mmdet/ops/carafe/src/carafe_naive_ext.cpp
  function carafe_naive_forward (line 18) | int carafe_naive_forward(at::Tensor features, at::Tensor masks,
  function carafe_naive_backward (line 32) | int carafe_naive_backward(at::Tensor top_grad, at::Tensor features,
  function PYBIND11_MODULE (line 48) | PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {

FILE: code/mmdet/ops/carafe/src/cuda/carafe_cuda.cpp
  function carafe_forward_cuda (line 34) | int carafe_forward_cuda(at::Tensor features, at::Tensor rfeatures,
  function carafe_backward_cuda (line 68) | int carafe_backward_cuda(at::Tensor top_grad, at::Tensor rfeatures,

FILE: code/mmdet/ops/carafe/src/cuda/carafe_naive_cuda.cpp
  function carafe_naive_forward_cuda (line 28) | int carafe_naive_forward_cuda(at::Tensor features, at::Tensor masks,
  function carafe_naive_backward_cuda (line 48) | int carafe_naive_backward_cuda(at::Tensor top_grad, at::Tensor features,

FILE: code/mmdet/ops/chamfer_2d/dist_chamfer_2d.py
  class ChamferFunction2D (line 10) | class ChamferFunction2D(Function):
    method forward (line 12) | def forward(ctx, xyz1, xyz2):
    method backward (line 34) | def backward(ctx, graddist1, graddist2, gradidx1, gradidx2):
  class Chamfer2D (line 51) | class Chamfer2D(nn.Module):
    method __init__ (line 52) | def __init__(self):
    method forward (line 55) | def forward(self, input1, input2):

FILE: code/mmdet/ops/chamfer_2d/src/chamfer_cuda.cpp
  function chamfer_forward (line 17) | int chamfer_forward(at::Tensor xyz1, at::Tensor xyz2, at::Tensor dist1, ...
  function chamfer_backward (line 22) | int chamfer_backward(at::Tensor xyz1, at::Tensor xyz2, at::Tensor gradxy...
  function PYBIND11_MODULE (line 30) | PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {

FILE: code/mmdet/ops/context_block.py
  function last_zero_init (line 6) | def last_zero_init(m):
  class ContextBlock (line 13) | class ContextBlock(nn.Module):
    method __init__ (line 27) | def __init__(self,
    method reset_parameters (line 66) | def reset_parameters(self):
    method spatial_pool (line 76) | def spatial_pool(self, x):
    method forward (line 102) | def forward(self, x):

FILE: code/mmdet/ops/conv_ws.py
  function conv_ws_2d (line 7) | def conv_ws_2d(input,
  class ConvWS2d (line 24) | class ConvWS2d(nn.Conv2d):
    method __init__ (line 26) | def __init__(self,
    method forward (line 47) | def forward(self, x):
  class ConvAWS2d (line 53) | class ConvAWS2d(nn.Conv2d):
    method __init__ (line 76) | def __init__(self,
    method _get_weight (line 99) | def _get_weight(self, weight):
    method forward (line 107) | def forward(self, x):
    method _load_from_state_dict (line 112) | def _load_from_state_dict(self, state_dict, prefix, local_metadata, st...

FILE: code/mmdet/ops/corner_pool/corner_pool.py
  class TopPoolFunction (line 10) | class TopPoolFunction(Function):
    method forward (line 13) | def forward(ctx, input):
    method backward (line 19) | def backward(ctx, grad_output):
  class BottomPoolFunction (line 25) | class BottomPoolFunction(Function):
    method forward (line 28) | def forward(ctx, input):
    method backward (line 34) | def backward(ctx, grad_output):
  class LeftPoolFunction (line 40) | class LeftPoolFunction(Function):
    method forward (line 43) | def forward(ctx, input):
    method backward (line 49) | def backward(ctx, grad_output):
  class RightPoolFunction (line 55) | class RightPoolFunction(Function):
    method forward (line 58) | def forward(ctx, input):
    method backward (line 64) | def backward(ctx, grad_output):
  class CornerPool (line 70) | class CornerPool(nn.Module):
    method __init__ (line 100) | def __init__(self, mode):
    method forward (line 106) | def forward(self, x):
  class CornerPoolPack (line 119) | class CornerPoolPack(nn.Module):
    method __init__ (line 120) | def __init__(self, dim, pool1, pool2, conv_cfg=None, norm_cfg=None, fi...
    method forward (line 158) | def forward(self, x):
  class TLPool (line 179) | class TLPool(CornerPoolPack):
    method __init__ (line 180) | def __init__(self, dim, conv_cfg=None, norm_cfg=None, first_kernel_siz...
  class BRPool (line 184) | class BRPool(CornerPoolPack):
    method __init__ (line 185) | def __init__(self, dim, conv_cfg=None, norm_cfg=None, first_kernel_siz...

FILE: code/mmdet/ops/corner_pool/src/corner_pool.cpp
  function bottom_pool_forward (line 7) | at::Tensor bottom_pool_forward(at::Tensor input) {
  function bottom_pool_backward (line 26) | at::Tensor bottom_pool_backward(at::Tensor input, at::Tensor grad_output) {
  function left_pool_forward (line 68) | at::Tensor left_pool_forward(at::Tensor input) {
  function left_pool_backward (line 87) | at::Tensor left_pool_backward(at::Tensor input, at::Tensor grad_output) {
  function right_pool_forward (line 129) | at::Tensor right_pool_forward(at::Tensor input) {
  function right_pool_backward (line 148) | at::Tensor right_pool_backward(at::Tensor input, at::Tensor grad_output) {
  function top_pool_forward (line 190) | at::Tensor top_pool_forward(at::Tensor input) {
  function top_pool_backward (line 209) | at::Tensor top_pool_backward(at::Tensor input, at::Tensor grad_output) {
  function PYBIND11_MODULE (line 251) | PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {

FILE: code/mmdet/ops/dcn/deform_conv.py
  class DeformConvFunction (line 15) | class DeformConvFunction(Function):
    method forward (line 18) | def forward(ctx,
    method backward (line 62) | def backward(ctx, grad_output):
    method _output_size (line 99) | def _output_size(input, weight, padding, dilation, stride):
  class ModulatedDeformConvFunction (line 114) | class ModulatedDeformConvFunction(Function):
    method forward (line 117) | def forward(ctx,
    method backward (line 153) | def backward(ctx, grad_output):
    method _infer_shape (line 175) | def _infer_shape(ctx, input, weight):
  class PyramidDeformConvFunction (line 188) | class PyramidDeformConvFunction(Function):
    method forward (line 191) | def forward(ctx,
    method backward (line 237) | def backward(ctx, grad_output):
    method _output_size (line 275) | def _output_size(input, weight, padding, dilation, stride):
  class DeformConv (line 295) | class DeformConv(nn.Module):
    method __init__ (line 297) | def __init__(self,
    method reset_parameters (line 334) | def reset_parameters(self):
    method forward (line 341) | def forward(self, x, offset):
  class DeformConvPack (line 361) | class DeformConvPack(DeformConv):
    method __init__ (line 387) | def __init__(self, *args, **kwargs):
    method init_offset (line 401) | def init_offset(self):
    method forward (line 405) | def forward(self, x):
    method _load_from_state_dict (line 410) | def _load_from_state_dict(self, state_dict, prefix, local_metadata, st...
  class ModulatedDeformConv (line 438) | class ModulatedDeformConv(nn.Module):
    method __init__ (line 440) | def __init__(self,
    method init_weights (line 473) | def init_weights(self):
    method forward (line 482) | def forward(self, x, offset, mask):
  class ModulatedDeformConvPack (line 489) | class ModulatedDeformConvPack(ModulatedDeformConv):
    method __init__ (line 507) | def __init__(self, *args, **kwargs):
    method init_weights (line 521) | def init_weights(self):
    method forward (line 527) | def forward(self, x):
    method _load_from_state_dict (line 536) | def _load_from_state_dict(self, state_dict, prefix, local_metadata, st...
  class PyramidDeformConv (line 565) | class PyramidDeformConv(nn.Module):
    method __init__ (line 567) | def __init__(self,
    method reset_parameters (line 604) | def reset_parameters(self):
    method forward (line 611) | def forward(self, x, offset, scale_h, scale_w):

FILE: code/mmdet/ops/dcn/deform_pool.py
  class DeformRoIPoolingFunction (line 10) | class DeformRoIPoolingFunction(Function):
    method forward (line 13) | def forward(ctx,
    method backward (line 60) | def backward(ctx, grad_output):
  class DeformRoIPooling (line 82) | class DeformRoIPooling(nn.Module):
    method __init__ (line 84) | def __init__(self,
    method forward (line 103) | def forward(self, data, rois, offset):
  class DeformRoIPoolingPack (line 113) | class DeformRoIPoolingPack(DeformRoIPooling):
    method __init__ (line 115) | def __init__(self,
    method forward (line 149) | def forward(self, data, rois):
  class ModulatedDeformRoIPoolingPack (line 177) | class ModulatedDeformRoIPoolingPack(DeformRoIPooling):
    method __init__ (line 179) | def __init__(self,
    method forward (line 232) | def forward(self, data, rois):

FILE: code/mmdet/ops/dcn/src/cuda/deform_conv_cuda.cpp
  function shape_check (line 92) | void shape_check(at::Tensor input, at::Tensor offset, at::Tensor *gradOu...
  function pyramid_shape_check (line 182) | void pyramid_shape_check(at::Tensor input, at::Tensor offset, at::Tensor...
  function deform_conv_forward_cuda (line 274) | int deform_conv_forward_cuda(at::Tensor input, at::Tensor weight,
  function deform_conv_backward_input_cuda (line 384) | int deform_conv_backward_input_cuda(at::Tensor input, at::Tensor offset,
  function deform_conv_backward_parameters_cuda (line 498) | int deform_conv_backward_parameters_cuda(
  function modulated_deform_conv_cuda_forward (line 613) | void modulated_deform_conv_cuda_forward(
  function modulated_deform_conv_cuda_backward (line 694) | void modulated_deform_conv_cuda_backward(
  function pyramid_deform_conv_forward_cuda (line 811) | int pyramid_deform_conv_forward_cuda(at::Tensor input, at::Tensor weight,
  function pyramid_deform_conv_backward_input_cuda (line 921) | int pyramid_deform_conv_backward_input_cuda(at::Tensor input, at::Tensor...
  function pyramid_deform_conv_backward_parameters_cuda (line 1038) | int pyramid_deform_conv_backward_parameters_cuda(

FILE: code/mmdet/ops/dcn/src/cuda/deform_pool_cuda.cpp
  function deform_psroi_pooling_cuda_forward (line 31) | void deform_psroi_pooling_cuda_forward(
  function deform_psroi_pooling_cuda_backward (line 56) | void deform_psroi_pooling_cuda_backward(

FILE: code/mmdet/ops/dcn/src/deform_conv_ext.cpp
  function deform_conv_forward (line 74) | int deform_conv_forward(at::Tensor input, at::Tensor weight,
  function deform_conv_backward_input (line 92) | int deform_conv_backward_input(at::Tensor input, at::Tensor offset,
  function deform_conv_backward_parameters (line 111) | int deform_conv_backward_parameters(
  function modulated_deform_conv_forward (line 129) | void modulated_deform_conv_forward(
  function modulated_deform_conv_backward (line 149) | void modulated_deform_conv_backward(
  function pyramid_deform_conv_forward (line 171) | int pyramid_deform_conv_forward(at::Tensor input, at::Tensor weight,
  function pyramid_deform_conv_backward_input (line 190) | int pyramid_deform_conv_backward_input(at::Tensor input, at::Tensor offset,
  function pyramid_deform_conv_backward_parameters (line 209) | int pyramid_deform_conv_backward_parameters(
  function PYBIND11_MODULE (line 227) | PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {

FILE: code/mmdet/ops/dcn/src/deform_pool_ext.cpp
  function deform_psroi_pooling_forward (line 29) | void deform_psroi_pooling_forward(
  function deform_psroi_pooling_backward (line 46) | void deform_psroi_pooling_backward(
  function PYBIND11_MODULE (line 66) | PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {

FILE: code/mmdet/ops/generalized_attention.py
  class GeneralizedAttention (line 10) | class GeneralizedAttention(nn.Module):
    method __init__ (line 34) | def __init__(self,
    method get_position_embedding (line 153) | def get_position_embedding(self,
    method forward (line 197) | def forward(self, x_input):
    method init_weights (line 375) | def init_weights(self):

FILE: code/mmdet/ops/masked_conv/masked_conv.py
  class MaskedConv2dFunction (line 12) | class MaskedConv2dFunction(Function):
    method forward (line 15) | def forward(ctx, features, mask, weight, bias, padding=0, stride=1):
    method backward (line 57) | def backward(ctx, grad_output):
  class MaskedConv2d (li
Condensed preview — 661 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,413K chars).
[
  {
    "path": "README.md",
    "chars": 14023,
    "preview": "### The trained models are temporarily unavailable, but you can train the code using reasonable computational resource.\n"
  },
  {
    "path": "checkpoints/000.txt",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "code/LICENSE",
    "chars": 1162,
    "preview": "    MIT License\n\n    Copyright (c) Microsoft Corporation. All rights reserved.\n\n    Permission is hereby granted, free o"
  },
  {
    "path": "code/ThirdPartyNotices.txt",
    "chars": 12725,
    "preview": "************************************************************************\n\nTHIRD-PARTY SOFTWARE NOTICES AND INFORMATION\n\n"
  },
  {
    "path": "code/cocoapi/.github/workflows/build.yml",
    "chars": 1217,
    "preview": "# This workflow will install Python dependencies, run tests and lint with a variety of Python versions\n# For more inform"
  },
  {
    "path": "code/cocoapi/.github/workflows/deploy.yml",
    "chars": 823,
    "preview": "name: deploy\n\non: push\n\njobs:\n  build-n-publish:\n    runs-on: ubuntu-latest\n    if: startsWith(github.event.ref, 'refs/t"
  },
  {
    "path": "code/cocoapi/.gitignore",
    "chars": 2306,
    "preview": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packagi"
  },
  {
    "path": "code/cocoapi/.isort.cfg",
    "chars": 63,
    "preview": "[settings]\nknown_third_party = cv2,matplotlib,numpy,setuptools\n"
  },
  {
    "path": "code/cocoapi/.pre-commit-config.yaml",
    "chars": 738,
    "preview": "repos:\n  - repo: https://gitlab.com/pycqa/flake8.git\n    rev: 3.8.0\n    hooks:\n      - id: flake8\n  - repo: https://gith"
  },
  {
    "path": "code/cocoapi/MANIFEST.in",
    "chars": 68,
    "preview": "include pycocotools/pycocotools/*.pyx\ninclude lvis/requirements.txt\n"
  },
  {
    "path": "code/cocoapi/README.md",
    "chars": 1148,
    "preview": "# OpenMMLab cocoapi\n\nIn this repo, we merged COCO and LVIS API into one repo.\n\nFor bug fixes and better compatability wi"
  },
  {
    "path": "code/cocoapi/license.txt",
    "chars": 1529,
    "preview": "Copyright (c) 2014, Piotr Dollar and Tsung-Yi Lin\nAll rights reserved.\n\nRedistribution and use in source and binary form"
  },
  {
    "path": "code/cocoapi/lvis/lvis/__init__.py",
    "chars": 189,
    "preview": "from .eval import LVISEval\nfrom .lvis import LVIS\nfrom .results import LVISResults\nfrom .vis import LVISVis\n\n__all__ = ["
  },
  {
    "path": "code/cocoapi/lvis/lvis/colormap.py",
    "chars": 3866,
    "preview": "\"\"\"An awesome colormap for really neat visualizations. Taken from detectron.\"\"\"\n\nimport numpy as np\n\n\ndef colormap(rgb=F"
  },
  {
    "path": "code/cocoapi/lvis/lvis/eval.py",
    "chars": 20762,
    "preview": "import datetime\nimport logging\nfrom collections import OrderedDict, defaultdict\n\nimport numpy as np\n\nimport pycocotools."
  },
  {
    "path": "code/cocoapi/lvis/lvis/lvis.py",
    "chars": 6094,
    "preview": "\"\"\"\nAPI for accessing LVIS Dataset: https://lvisdataset.org.\n\nLVIS API is a Python API that assists in loading, parsing "
  },
  {
    "path": "code/cocoapi/lvis/lvis/results.py",
    "chars": 3266,
    "preview": "import logging\nfrom collections import defaultdict\nfrom copy import deepcopy\n\nimport pycocotools.mask as mask_utils\n\nfro"
  },
  {
    "path": "code/cocoapi/lvis/lvis/vis.py",
    "chars": 7053,
    "preview": "import logging\nimport os\n\nimport cv2\nimport matplotlib.pyplot as plt\nimport numpy as np\nfrom matplotlib.patches import P"
  },
  {
    "path": "code/cocoapi/lvis/requirements.txt",
    "chars": 157,
    "preview": "cycler>=0.10.0\nCython>=0.29.12\nkiwisolver>=1.1.0\nmatplotlib>=3.1.1\nnumpy>=1.18.2\nopencv-python>=4.1.0.25\npyparsing>=2.4."
  },
  {
    "path": "code/cocoapi/lvis/setup.py",
    "chars": 1158,
    "preview": "\"\"\"LVIS (pronounced ‘el-vis’): is a new dataset for Large Vocabulary Instance\nSegmentation. We collect over 2 million hi"
  },
  {
    "path": "code/cocoapi/pycocotools/MANIFEST.in",
    "chars": 73,
    "preview": "include common/*.cpp common/*.h common/*.c\ninclude pycocotools/_mask.pyx\n"
  },
  {
    "path": "code/cocoapi/pycocotools/Makefile",
    "chars": 200,
    "preview": "all:\n    # install pycocotools locally\n\tpython setup.py build_ext --inplace\n\trm -rf build\n\ninstall:\n\t# install pycocotoo"
  },
  {
    "path": "code/cocoapi/pycocotools/common/gason.cpp",
    "chars": 9540,
    "preview": "// https://github.com/vivkin/gason - pulled January 10, 2016\n#include \"gason.h\"\n#include <stdlib.h>\n\n#define JSON_ZONE_S"
  },
  {
    "path": "code/cocoapi/pycocotools/common/gason.h",
    "chars": 3483,
    "preview": "// https://github.com/vivkin/gason - pulled January 10, 2016\n#pragma once\n\n#include <stdint.h>\n#include <stddef.h>\n#incl"
  },
  {
    "path": "code/cocoapi/pycocotools/common/maskApi.c",
    "chars": 8308,
    "preview": "/**************************************************************************\n* Microsoft COCO Toolbox.      version 2.0\n*"
  },
  {
    "path": "code/cocoapi/pycocotools/common/maskApi.h",
    "chars": 2176,
    "preview": "/**************************************************************************\n* Microsoft COCO Toolbox.      version 2.0\n*"
  },
  {
    "path": "code/cocoapi/pycocotools/pycocoDemo.ipynb",
    "chars": 1790308,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"collapsed\": true\n   },\n   \"outp"
  },
  {
    "path": "code/cocoapi/pycocotools/pycocoEvalDemo.ipynb",
    "chars": 4456,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"out"
  },
  {
    "path": "code/cocoapi/pycocotools/pycocotools/__init__.py",
    "chars": 44,
    "preview": "__author__ = 'tylin'\n__version__ = '12.0.2'\n"
  },
  {
    "path": "code/cocoapi/pycocotools/pycocotools/_mask.pyx",
    "chars": 11440,
    "preview": "# distutils: language = c\n# distutils: sources = ../common/maskApi.c\n\n#*************************************************"
  },
  {
    "path": "code/cocoapi/pycocotools/pycocotools/coco.py",
    "chars": 20636,
    "preview": "__author__ = 'tylin'\n__version__ = '2.0'\n# Interface for accessing the Microsoft COCO dataset.\n\n# Microsoft COCO is a la"
  },
  {
    "path": "code/cocoapi/pycocotools/pycocotools/cocoeval.py",
    "chars": 25707,
    "preview": "__author__ = 'tsungyi'\n\nimport copy\nimport datetime\nimport time\nfrom collections import defaultdict\n\nimport numpy as np\n"
  },
  {
    "path": "code/cocoapi/pycocotools/pycocotools/mask.py",
    "chars": 4630,
    "preview": "__author__ = 'tsungyi'\n\nimport pycocotools._mask as _mask\n\n# Interface for manipulating masks stored in RLE format.\n#\n# "
  },
  {
    "path": "code/cocoapi/pycocotools/setup.py",
    "chars": 922,
    "preview": "import numpy as np\nfrom setuptools import Extension, setup\n\n# To compile and install locally run \"python setup.py build_"
  },
  {
    "path": "code/configs/_base_/datasets/cityscapes_detection.py",
    "chars": 1918,
    "preview": "dataset_type = 'CityscapesDataset'\ndata_root = 'data/cityscapes/'\nimg_norm_cfg = dict(\n    mean=[123.675, 116.28, 103.53"
  },
  {
    "path": "code/configs/_base_/datasets/cityscapes_instance.py",
    "chars": 1944,
    "preview": "dataset_type = 'CityscapesDataset'\ndata_root = 'data/cityscapes/'\nimg_norm_cfg = dict(\n    mean=[123.675, 116.28, 103.53"
  },
  {
    "path": "code/configs/_base_/datasets/coco_detection.py",
    "chars": 1692,
    "preview": "dataset_type = 'CocoDataset'\ndata_root = 'data/coco/'\nimg_norm_cfg = dict(\n    mean=[123.675, 116.28, 103.53], std=[58.3"
  },
  {
    "path": "code/configs/_base_/datasets/coco_instance.py",
    "chars": 1718,
    "preview": "dataset_type = 'CocoDataset'\ndata_root = 'data/coco/'\nimg_norm_cfg = dict(\n    mean=[123.675, 116.28, 103.53], std=[58.3"
  },
  {
    "path": "code/configs/_base_/datasets/coco_instance_semantic.py",
    "chars": 1903,
    "preview": "dataset_type = 'CocoDataset'\ndata_root = 'data/coco/'\nimg_norm_cfg = dict(\n    mean=[123.675, 116.28, 103.53], std=[58.3"
  },
  {
    "path": "code/configs/_base_/datasets/coco_lsvr.py",
    "chars": 1786,
    "preview": "dataset_type = 'CocoDataset'\ndata_root = '/home/ma-user/work/duankaiwen/coco/'\nimg_norm_cfg = dict(\n    mean=[123.675, 1"
  },
  {
    "path": "code/configs/_base_/datasets/coco_pose.py",
    "chars": 1794,
    "preview": "dataset_type = 'CocoPoseDataset'\ndata_root = '/home/ma-user/work/duankaiwen/coco/'\nimg_norm_cfg = dict(\n    mean=[123.67"
  },
  {
    "path": "code/configs/_base_/datasets/deepfashion.py",
    "chars": 1888,
    "preview": "# dataset settings\ndataset_type = 'DeepFashionDataset'\ndata_root = 'data/DeepFashion/In-shop/'\nimg_norm_cfg = dict(\n    "
  },
  {
    "path": "code/configs/_base_/datasets/lvis_instance.py",
    "chars": 736,
    "preview": "_base_ = 'coco_instance.py'\ndataset_type = 'LVISDataset'\ndata_root = 'data/lvis/'\ndata = dict(\n    samples_per_gpu=2,\n  "
  },
  {
    "path": "code/configs/_base_/datasets/voc0712.py",
    "chars": 1916,
    "preview": "# dataset settings\ndataset_type = 'VOCDataset'\ndata_root = 'data/VOCdevkit/'\nimg_norm_cfg = dict(\n    mean=[123.675, 116"
  },
  {
    "path": "code/configs/_base_/datasets/wider_face.py",
    "chars": 2011,
    "preview": "# dataset settings\ndataset_type = 'WIDERFaceDataset'\ndata_root = 'data/WIDERFace/'\nimg_norm_cfg = dict(mean=[123.675, 11"
  },
  {
    "path": "code/configs/_base_/default_runtime.py",
    "chars": 319,
    "preview": "checkpoint_config = dict(interval=1)\n# yapf:disable\nlog_config = dict(\n    interval=50,\n    hooks=[\n        dict(type='T"
  },
  {
    "path": "code/configs/_base_/models/cascade_mask_rcnn_r50_fpn.py",
    "chars": 6590,
    "preview": "# model settings\nmodel = dict(\n    type='CascadeRCNN',\n    pretrained='torchvision://resnet50',\n    backbone=dict(\n     "
  },
  {
    "path": "code/configs/_base_/models/cascade_rcnn_r50_fpn.py",
    "chars": 5972,
    "preview": "# model settings\nmodel = dict(\n    type='CascadeRCNN',\n    pretrained='torchvision://resnet50',\n    backbone=dict(\n     "
  },
  {
    "path": "code/configs/_base_/models/fast_rcnn_r50_fpn.py",
    "chars": 1903,
    "preview": "# model settings\nmodel = dict(\n    type='FastRCNN',\n    pretrained='torchvision://resnet50',\n    backbone=dict(\n        "
  },
  {
    "path": "code/configs/_base_/models/faster_rcnn_r50_caffe_c4.py",
    "chars": 3452,
    "preview": "# model settings\nnorm_cfg = dict(type='BN', requires_grad=False)\nmodel = dict(\n    type='FasterRCNN',\n    pretrained='op"
  },
  {
    "path": "code/configs/_base_/models/faster_rcnn_r50_fpn.py",
    "chars": 3380,
    "preview": "model = dict(\n    type='FasterRCNN',\n    pretrained='torchvision://resnet50',\n    backbone=dict(\n        type='ResNet',\n"
  },
  {
    "path": "code/configs/_base_/models/mask_rcnn_r50_caffe_c4.py",
    "chars": 3827,
    "preview": "# model settings\nnorm_cfg = dict(type='BN', requires_grad=False)\nmodel = dict(\n    type='MaskRCNN',\n    pretrained='open"
  },
  {
    "path": "code/configs/_base_/models/mask_rcnn_r50_fpn.py",
    "chars": 3838,
    "preview": "# model settings\nmodel = dict(\n    type='MaskRCNN',\n    pretrained='torchvision://resnet50',\n    backbone=dict(\n        "
  },
  {
    "path": "code/configs/_base_/models/retinanet_r50_fpn.py",
    "chars": 1651,
    "preview": "# model settings\nmodel = dict(\n    type='RetinaNet',\n    pretrained='torchvision://resnet50',\n    backbone=dict(\n       "
  },
  {
    "path": "code/configs/_base_/models/rpn_r50_caffe_c4.py",
    "chars": 1655,
    "preview": "# model settings\nmodel = dict(\n    type='RPN',\n    pretrained='open-mmlab://detectron2/resnet50_caffe',\n    backbone=dic"
  },
  {
    "path": "code/configs/_base_/models/rpn_r50_fpn.py",
    "chars": 1699,
    "preview": "# model settings\nmodel = dict(\n    type='RPN',\n    pretrained='torchvision://resnet50',\n    backbone=dict(\n        type="
  },
  {
    "path": "code/configs/_base_/models/ssd300.py",
    "chars": 1389,
    "preview": "# model settings\ninput_size = 300\nmodel = dict(\n    type='SingleStageDetector',\n    pretrained='open-mmlab://vgg16_caffe"
  },
  {
    "path": "code/configs/_base_/schedules/schedule_1x.py",
    "chars": 283,
    "preview": "# optimizer\noptimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001)\noptimizer_config = dict(grad_clip=N"
  },
  {
    "path": "code/configs/_base_/schedules/schedule_20e.py",
    "chars": 284,
    "preview": "# optimizer\noptimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001)\noptimizer_config = dict(grad_clip=N"
  },
  {
    "path": "code/configs/_base_/schedules/schedule_2x.py",
    "chars": 284,
    "preview": "# optimizer\noptimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001)\noptimizer_config = dict(grad_clip=N"
  },
  {
    "path": "code/configs/lsnet/lsnet_bbox_cpv_res2_101_fpn_dconv_c3-c5_mstrain_2x_coco.py",
    "chars": 1953,
    "preview": "_base_ = './lsnet_bbox_cpv_x101_fpn_dconv_c3-c5_mstrain_2x_coco.py'\nmodel = dict(\n    pretrained='../checkpoints/pretrai"
  },
  {
    "path": "code/configs/lsnet/lsnet_bbox_cpv_x101_fpn_dconv_c3-c5_mstrain_2x_coco.py",
    "chars": 4336,
    "preview": "_base_ = './lsnet_bbox_r50_fpn_mstrain_2x_coco.py'\nnorm_cfg = dict(type='GN', num_groups=32, requires_grad=True)\nmodel ="
  },
  {
    "path": "code/configs/lsnet/lsnet_bbox_r50_fpn_1x_coco.py",
    "chars": 2113,
    "preview": "_base_ = [\n    '../_base_/datasets/coco_lsvr.py',\n    '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.p"
  },
  {
    "path": "code/configs/lsnet/lsnet_bbox_r50_fpn_mstrain_2x_coco.py",
    "chars": 791,
    "preview": "_base_ = './lsnet_bbox_r50_fpn_1x_coco.py'\n# learning policy\nlr_config = dict(step=[16, 22])\ntotal_epochs = 24\n#multi-sc"
  },
  {
    "path": "code/configs/lsnet/lsnet_bbox_x101_fpn_dconv_c3-c5_mstrain_2x_coco.py.py",
    "chars": 1777,
    "preview": "_base_ = './lsnet_bbox_r50_fpn_mstrain_2x_coco.py'\nmodel = dict(\n    pretrained='../checkpoints/pretrained/resnext101_64"
  },
  {
    "path": "code/configs/lsnet/lsnet_bbox_x101_fpn_mstrain_2x_coco.py",
    "chars": 448,
    "preview": "_base_ = './lsnet_bbox_r50_fpn_mstrain_2x_coco.py'\nmodel = dict(\n    pretrained='../checkpoints/pretrained/resnext101_64"
  },
  {
    "path": "code/configs/lsnet/lsnet_pose_bbox_r50_fpn_1x_coco.py",
    "chars": 2312,
    "preview": "_base_ = [\n    '../_base_/datasets/coco_pose.py',\n    '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.p"
  },
  {
    "path": "code/configs/lsnet/lsnet_pose_bbox_r50_fpn_mstrain_2x_coco.py",
    "chars": 817,
    "preview": "_base_ = './lsnet_pose_bbox_r50_fpn_1x_coco.py'\n# learning policy\nlr_config = dict(step=[16, 22])\ntotal_epochs = 24\n#mul"
  },
  {
    "path": "code/configs/lsnet/lsnet_pose_bbox_res2_101_fpn_dconv_c3-c5_mstrain_2x_coco.py",
    "chars": 2495,
    "preview": "_base_ = './lsnet_pose_bbox_r50_fpn_mstrain_2x_coco.py'\n\nlr_config = dict(step=[54, 56])\ntotal_epochs = 60\n\nmodel = dict"
  },
  {
    "path": "code/configs/lsnet/lsnet_pose_bbox_x101_fpn_dconv_c3-c5_mstrain_2x_coco.py",
    "chars": 2597,
    "preview": "_base_ = './lsnet_pose_bbox_r50_fpn_mstrain_2x_coco.py'\n\nlr_config = dict(step=[54, 56])\ntotal_epochs = 60\n\nmodel = dict"
  },
  {
    "path": "code/configs/lsnet/lsnet_pose_kbox_res2_101_fpn_dconv_c3-c5_mstrain_2x_coco.py",
    "chars": 2982,
    "preview": "_base_ = './lsnet_pose_bbox_res2_101_fpn_dconv_c3-c5_mstrain_2x_coco.py'\n\nlr_config = dict(step=[12, 20])\ntotal_epochs ="
  },
  {
    "path": "code/configs/lsnet/lsnet_pose_kbox_x101_fpn_dconv_c3-c5_mstrain_2x_coco.py",
    "chars": 2960,
    "preview": "_base_ = './lsnet_pose_bbox_x101_fpn_dconv_c3-c5_mstrain_2x_coco.py'\n\nlr_config = dict(step=[12, 20])\ntotal_epochs = 24\n"
  },
  {
    "path": "code/configs/lsnet/lsnet_segm_r50_fpn_1x_coco.py",
    "chars": 2832,
    "preview": "_base_ = [\n    '../_base_/datasets/coco_lsvr.py',\n    '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.p"
  },
  {
    "path": "code/configs/lsnet/lsnet_segm_r50_fpn_mstrain_2x_coco.py",
    "chars": 899,
    "preview": "_base_ = './lsnet_segm_r50_fpn_1x_coco.py'\n# learning policy\nlr_config = dict(step=[16, 22])\ntotal_epochs = 24\n#multi-sc"
  },
  {
    "path": "code/configs/lsnet/lsnet_segm_res2_101_fpn_dconv_c3-c5_mstrain_30e_coco.py",
    "chars": 1709,
    "preview": "_base_ = './lsnet_segm_r50_fpn_mstrain_2x_coco.py'\n\nlr_config = dict(step=[28, 30])\ntotal_epochs = 30\n\nmodel = dict(\n   "
  },
  {
    "path": "code/configs/lsnet/lsnet_segm_x101_fpn_dconv_c3-c5_mstrain_30e_coco.py",
    "chars": 1829,
    "preview": "_base_ = './lsnet_segm_r50_fpn_mstrain_2x_coco.py'\n\nlr_config = dict(step=[28, 30])\ntotal_epochs = 30\n\nmodel = dict(\n   "
  },
  {
    "path": "code/configs/lsnet/lsnet_segm_x101_fpn_mstrain_30e_coco.py",
    "chars": 501,
    "preview": "_base_ = './lsnet_segm_r50_fpn_mstrain_2x_coco.py'\n\nlr_config = dict(step=[28, 30])\ntotal_epochs = 30\n\nmodel = dict(\n   "
  },
  {
    "path": "code/docker/Dockerfile",
    "chars": 740,
    "preview": "ARG PYTORCH=\"1.5\"\nARG CUDA=\"10.1\"\nARG CUDNN=\"7\"\n\nFROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel\n\nENV TO"
  },
  {
    "path": "code/docs/Makefile",
    "chars": 634,
    "preview": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line, and also\n# from the "
  },
  {
    "path": "code/docs/api.rst",
    "chars": 1333,
    "preview": "API Reference\n=================\n\nmmdet.apis\n--------------\n.. automodule:: mmdet.apis\n    :members:\n\nmmdet.core\n--------"
  },
  {
    "path": "code/docs/changelog.md",
    "chars": 18869,
    "preview": "## Changelog\n\n### v2.2.0 (1/7/2020)\n\n**Highlights**\n- Support new methods: [DetectoRS](https://arxiv.org/abs/2006.02334)"
  },
  {
    "path": "code/docs/compatibility.md",
    "chars": 7143,
    "preview": "# Compatibility with MMDetection 1.x\n\nMMDetection 2.0 goes through a big refactoring and addresses many legacy issues. I"
  },
  {
    "path": "code/docs/conf.py",
    "chars": 2653,
    "preview": "# Configuration file for the Sphinx documentation builder.\n#\n# This file only contains a selection of the most common op"
  },
  {
    "path": "code/docs/config.md",
    "chars": 30323,
    "preview": "# Config System\nWe incorporate modular and inheritance design into our config system, which is convenient to conduct var"
  },
  {
    "path": "code/docs/getting_started.md",
    "chars": 16991,
    "preview": "# Getting Started\n\nThis page provides basic tutorials about the usage of MMDetection.\nFor installation instructions, ple"
  },
  {
    "path": "code/docs/index.rst",
    "chars": 424,
    "preview": "Welcome to MMDetection's documentation!\n=======================================\n\n.. toctree::\n   :maxdepth: 2\n\n   instal"
  },
  {
    "path": "code/docs/install.md",
    "chars": 5144,
    "preview": "## Installation\n\n### Requirements\n\n- Linux or macOS (Windows is not currently officially supported)\n- Python 3.6+\n- PyTo"
  },
  {
    "path": "code/docs/make.bat",
    "chars": 760,
    "preview": "@ECHO OFF\n\npushd %~dp0\n\nREM Command file for Sphinx documentation\n\nif \"%SPHINXBUILD%\" == \"\" (\n\tset SPHINXBUILD=sphinx-bu"
  },
  {
    "path": "code/docs/model_zoo.md",
    "chars": 12370,
    "preview": "# Benchmark and Model Zoo\n\n## Mirror sites\n\nWe use AWS as the main site to host our model zoo, and maintain a mirror on "
  },
  {
    "path": "code/docs/projects.md",
    "chars": 5617,
    "preview": "# Projects\n\nThere are many projects built upon MMDetection.\nSome of them are published in top-tier conferences (CVPR, IC"
  },
  {
    "path": "code/docs/robustness_benchmarking.md",
    "chars": 5502,
    "preview": "# Corruption Benchmarking\n\n## Introduction\n\nWe provide tools to test object detection and instance segmentation models o"
  },
  {
    "path": "code/docs/tutorials/data_pipeline.md",
    "chars": 4892,
    "preview": "# Tutorial 3: Custom Data Pipelines\n\n## Design of Data pipelines\n\nFollowing typical conventions, we use `Dataset` and `D"
  },
  {
    "path": "code/docs/tutorials/finetune.md",
    "chars": 3804,
    "preview": "# Tutorial 1: Finetuning Models\n\nDetectors pre-trained on the COCO dataset can serve as a good pre-trained model for oth"
  },
  {
    "path": "code/docs/tutorials/new_dataset.md",
    "chars": 9863,
    "preview": "# Tutorial 2: Adding New Dataset\n\n## Customize datasets by reorganizing data\n\n### Reorganize dataset to existing format\n"
  },
  {
    "path": "code/docs/tutorials/new_modules.md",
    "chars": 11629,
    "preview": "# Tutorial 4: Adding New Modules\n\n## Customize optimizer\n\nA customized optimizer could be defined as following.\n\nAssume "
  },
  {
    "path": "code/mmcv/.dockerignore",
    "chars": 65,
    "preview": ".git\n.gitignore\n*.egg-info\n.eggs/\n.mypy-cache\npip-wheel-metadata\n"
  },
  {
    "path": "code/mmcv/.github/workflows/build.yml",
    "chars": 1777,
    "preview": "# This workflow will install Python dependencies, run tests and lint with a variety of Python versions\n# For more inform"
  },
  {
    "path": "code/mmcv/.github/workflows/publish-to-pypi.yml",
    "chars": 506,
    "preview": "name: deploy\n\non: push\n\njobs:\n  build-n-publish:\n    runs-on: ubuntu-latest\n    if: startsWith(github.event.ref, 'refs/t"
  },
  {
    "path": "code/mmcv/.gitignore",
    "chars": 1304,
    "preview": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packagi"
  },
  {
    "path": "code/mmcv/.pre-commit-config.yaml",
    "chars": 784,
    "preview": "exclude: ^tests/data/\nrepos:\n  - repo: https://gitlab.com/pycqa/flake8.git\n    rev: 3.8.0\n    hooks:\n      - id: flake8\n"
  },
  {
    "path": "code/mmcv/.readthedocs.yml",
    "chars": 125,
    "preview": "version: 2\n\npython:\n  version: 3.7\n  install:\n    - requirements: requirements.txt\n    - requirements: docs/requirements"
  },
  {
    "path": "code/mmcv/CONTRIBUTING.md",
    "chars": 1609,
    "preview": "# Contributing to MMCV\n\nAll kinds of contributions are welcome, including but not limited to the following.\n\n- Fixes (ty"
  },
  {
    "path": "code/mmcv/Dockerfile",
    "chars": 67,
    "preview": "FROM python:3.7\n\nWORKDIR /mmcv\n\nCOPY . /mmcv\n\nRUN pip install -e .\n"
  },
  {
    "path": "code/mmcv/LICENSE",
    "chars": 11415,
    "preview": "Copyright (c) Open-MMLab. All rights reserved.\n\n                                 Apache License\n                        "
  },
  {
    "path": "code/mmcv/MANIFEST.in",
    "chars": 163,
    "preview": "include mmcv/video/optflow_warp/*.hpp mmcv/video/optflow_warp/*.pyx\ninclude requirements.txt\ninclude mmcv/model_zoo/open"
  },
  {
    "path": "code/mmcv/README.rst",
    "chars": 1605,
    "preview": "MMCV\n====\n\n.. image:: https://img.shields.io/pypi/v/mmcv\n  :target: https://pypi.org/project/mmcv\n\n.. image:: https://gi"
  },
  {
    "path": "code/mmcv/docs/Makefile",
    "chars": 581,
    "preview": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS    =\nSPHI"
  },
  {
    "path": "code/mmcv/docs/api.rst",
    "chars": 510,
    "preview": "API Documentation\n=================\n\n\nfileio\n-------\n.. automodule:: mmcv.fileio\n    :members:\n\nimage\n------\n.. automodu"
  },
  {
    "path": "code/mmcv/docs/cnn.md",
    "chars": 2694,
    "preview": "## CNN\n\nWe provide some building bricks for CNNs, includeing layer building, module bundles and weight initialization.\n\n"
  },
  {
    "path": "code/mmcv/docs/conf.py",
    "chars": 5485,
    "preview": "#\n# Configuration file for the Sphinx documentation builder.\n#\n# This file does only contain a selection of the most com"
  },
  {
    "path": "code/mmcv/docs/image.md",
    "chars": 3837,
    "preview": "## Image\n\nThis module provides some image processing methods, which requires `opencv` to be installed.\n\n### Read/Write/S"
  },
  {
    "path": "code/mmcv/docs/index.rst",
    "chars": 268,
    "preview": ".. include:: ../README.rst\n\nContents\n========\n\n.. toctree::\n   :maxdepth: 2\n\n   io.md\n   image.md\n   video.md\n   visuali"
  },
  {
    "path": "code/mmcv/docs/io.md",
    "chars": 2989,
    "preview": "## File IO\n\nThis module provides two universal API to load and dump files of different formats.\n\n### Load and dump data\n"
  },
  {
    "path": "code/mmcv/docs/make.bat",
    "chars": 752,
    "preview": "@ECHO OFF\n\npushd %~dp0\n\nREM Command file for Sphinx documentation\n\nif \"%SPHINXBUILD%\" == \"\" (\n\tset SPHINXBUILD=sphinx-bu"
  },
  {
    "path": "code/mmcv/docs/model_zoo.md",
    "chars": 1633,
    "preview": "## Model Zoo\nBesides torchvision pre-trained models, we also provide pre-trained models of following CNN:\n* VGG Caffe\n* "
  },
  {
    "path": "code/mmcv/docs/requirements.txt",
    "chars": 6,
    "preview": "torch\n"
  },
  {
    "path": "code/mmcv/docs/runner.md",
    "chars": 169,
    "preview": "## Runner\n\nThe runner module aims to help users to start training with less code, while stays\nflexible and configurable."
  },
  {
    "path": "code/mmcv/docs/utils.md",
    "chars": 4003,
    "preview": "## Utils\n\n### Config\n\n`Config` class is used for manipulating config and config files. It supports\nloading configs from "
  },
  {
    "path": "code/mmcv/docs/video.md",
    "chars": 3029,
    "preview": "## Video\n\nThis module provides the following functionalities.\n\n- A `VideoReader` class with friendly apis to read and co"
  },
  {
    "path": "code/mmcv/docs/visualization.md",
    "chars": 527,
    "preview": "## Visualization\n\n`mmcv` can show images and annotations (currently supported types include bounding boxes).\n\n```python\n"
  },
  {
    "path": "code/mmcv/examples/config_cifar10.py",
    "chars": 855,
    "preview": "# model settings\nmodel = 'resnet18'\n# dataset settings\ndata_root = '/mnt/SSD/dataset/cifar10'\nmean = [0.4914, 0.4822, 0."
  },
  {
    "path": "code/mmcv/examples/dist_train_cifar10.sh",
    "chars": 151,
    "preview": "#!/usr/bin/env bash\n\nPYTHON=${PYTHON:-\"python\"}\n\n$PYTHON -m torch.distributed.launch --nproc_per_node=$2 train_cifar10.p"
  },
  {
    "path": "code/mmcv/examples/resnet_cifar.py",
    "chars": 4139,
    "preview": "# copied from\n# https://github.com/kuangliu/pytorch-cifar/blob/master/models/resnet.py\n\nimport torch.nn as nn\nimport tor"
  },
  {
    "path": "code/mmcv/examples/train_cifar10.py",
    "chars": 5418,
    "preview": "import logging\nimport os\nfrom argparse import ArgumentParser\nfrom collections import OrderedDict\n\nimport resnet_cifar\nim"
  },
  {
    "path": "code/mmcv/mmcv/__init__.py",
    "chars": 356,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\n# flake8: noqa\nfrom .arraymisc import *\nfrom .fileio import *\nfrom .ima"
  },
  {
    "path": "code/mmcv/mmcv/arraymisc/__init__.py",
    "chars": 134,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom .quantization import dequantize, quantize\n\n__all__ = ['quantize', "
  },
  {
    "path": "code/mmcv/mmcv/arraymisc/quantization.py",
    "chars": 1825,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport numpy as np\n\n\ndef quantize(arr, min_val, max_val, levels, dtype="
  },
  {
    "path": "code/mmcv/mmcv/cnn/__init__.py",
    "chars": 1245,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom .alexnet import AlexNet\nfrom .bricks import (ACTIVATION_LAYERS, CO"
  },
  {
    "path": "code/mmcv/mmcv/cnn/alexnet.py",
    "chars": 1980,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport logging\n\nimport torch.nn as nn\n\nfrom ..runner import load_checkp"
  },
  {
    "path": "code/mmcv/mmcv/cnn/bricks/__init__.py",
    "chars": 844,
    "preview": "from .activation import build_activation_layer\nfrom .conv import build_conv_layer\nfrom .conv_module import ConvModule\nfr"
  },
  {
    "path": "code/mmcv/mmcv/cnn/bricks/activation.py",
    "chars": 648,
    "preview": "import torch.nn as nn\n\nfrom mmcv.utils import build_from_cfg\nfrom .registry import ACTIVATION_LAYERS\n\nfor module in [\n  "
  },
  {
    "path": "code/mmcv/mmcv/cnn/bricks/conv.py",
    "chars": 1404,
    "preview": "from torch import nn\n\nfrom .registry import CONV_LAYERS\n\nCONV_LAYERS.register_module('Conv1d', module=nn.Conv1d)\nCONV_LA"
  },
  {
    "path": "code/mmcv/mmcv/cnn/bricks/conv_module.py",
    "chars": 7653,
    "preview": "import warnings\n\nimport torch.nn as nn\n\nfrom ..utils import constant_init, kaiming_init\nfrom .activation import build_ac"
  },
  {
    "path": "code/mmcv/mmcv/cnn/bricks/hsigmoid.py",
    "chars": 441,
    "preview": "import torch.nn as nn\n\nfrom .registry import ACTIVATION_LAYERS\n\n\n@ACTIVATION_LAYERS.register_module()\nclass HSigmoid(nn."
  },
  {
    "path": "code/mmcv/mmcv/cnn/bricks/hswish.py",
    "chars": 565,
    "preview": "import torch.nn as nn\n\nfrom .registry import ACTIVATION_LAYERS\n\n\n@ACTIVATION_LAYERS.register_module()\nclass HSwish(nn.Mo"
  },
  {
    "path": "code/mmcv/mmcv/cnn/bricks/non_local.py",
    "chars": 8338,
    "preview": "from abc import ABCMeta\n\nimport torch\nimport torch.nn as nn\n\nfrom ..utils import constant_init, normal_init\nfrom .conv_m"
  },
  {
    "path": "code/mmcv/mmcv/cnn/bricks/norm.py",
    "chars": 5015,
    "preview": "import inspect\n\nimport torch.nn as nn\n\nfrom mmcv.utils import is_tuple_of\nfrom mmcv.utils.parrots_wrapper import SyncBat"
  },
  {
    "path": "code/mmcv/mmcv/cnn/bricks/padding.py",
    "chars": 1079,
    "preview": "import torch.nn as nn\n\nfrom .registry import PADDING_LAYERS\n\nPADDING_LAYERS.register_module('zero', module=nn.ZeroPad2d)"
  },
  {
    "path": "code/mmcv/mmcv/cnn/bricks/registry.py",
    "chars": 244,
    "preview": "from mmcv.utils import Registry\n\nCONV_LAYERS = Registry('conv layer')\nNORM_LAYERS = Registry('norm layer')\nACTIVATION_LA"
  },
  {
    "path": "code/mmcv/mmcv/cnn/bricks/scale.py",
    "chars": 529,
    "preview": "import torch\nimport torch.nn as nn\n\n\nclass Scale(nn.Module):\n    \"\"\"A learnable scale parameter.\n\n    This layer scales "
  },
  {
    "path": "code/mmcv/mmcv/cnn/bricks/upsample.py",
    "chars": 2896,
    "preview": "import torch.nn as nn\nimport torch.nn.functional as F\n\nfrom ..utils import xavier_init\nfrom .registry import UPSAMPLE_LA"
  },
  {
    "path": "code/mmcv/mmcv/cnn/resnet.py",
    "chars": 9943,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport logging\n\nimport torch.nn as nn\nimport torch.utils.checkpoint as "
  },
  {
    "path": "code/mmcv/mmcv/cnn/utils/__init__.py",
    "chars": 469,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom .flops_counter import get_model_complexity_info\nfrom .weight_init "
  },
  {
    "path": "code/mmcv/mmcv/cnn/utils/flops_counter.py",
    "chars": 21001,
    "preview": "# Modified from flops-counter.pytorch by Vladislav Sovrasov\n# original repo: https://github.com/sovrasov/flops-counter.p"
  },
  {
    "path": "code/mmcv/mmcv/cnn/utils/weight_init.py",
    "chars": 2203,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport numpy as np\nimport torch.nn as nn\n\n\ndef constant_init(module, va"
  },
  {
    "path": "code/mmcv/mmcv/cnn/vgg.py",
    "chars": 6041,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport logging\n\nimport torch.nn as nn\n\nfrom ..runner import load_checkp"
  },
  {
    "path": "code/mmcv/mmcv/fileio/__init__.py",
    "chars": 479,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom .file_client import BaseStorageBackend, FileClient\nfrom .handlers "
  },
  {
    "path": "code/mmcv/mmcv/fileio/file_client.py",
    "chars": 9651,
    "preview": "import inspect\nimport warnings\nfrom abc import ABCMeta, abstractmethod\n\n\nclass BaseStorageBackend(metaclass=ABCMeta):\n  "
  },
  {
    "path": "code/mmcv/mmcv/fileio/handlers/__init__.py",
    "chars": 279,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom .base import BaseFileHandler\nfrom .json_handler import JsonHandler"
  },
  {
    "path": "code/mmcv/mmcv/fileio/handlers/base.py",
    "chars": 689,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom abc import ABCMeta, abstractmethod\n\n\nclass BaseFileHandler(metacla"
  },
  {
    "path": "code/mmcv/mmcv/fileio/handlers/json_handler.py",
    "chars": 381,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport json\n\nfrom .base import BaseFileHandler\n\n\nclass JsonHandler(Base"
  },
  {
    "path": "code/mmcv/mmcv/fileio/handlers/pickle_handler.py",
    "chars": 796,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport pickle\n\nfrom .base import BaseFileHandler\n\n\nclass PickleHandler("
  },
  {
    "path": "code/mmcv/mmcv/fileio/handlers/yaml_handler.py",
    "chars": 666,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport yaml\n\ntry:\n    from yaml import CLoader as Loader, CDumper as Du"
  },
  {
    "path": "code/mmcv/mmcv/fileio/io.py",
    "chars": 3739,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom pathlib import Path\n\nfrom ..utils import is_list_of, is_str\nfrom ."
  },
  {
    "path": "code/mmcv/mmcv/fileio/parse.py",
    "chars": 1680,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\ndef list_from_file(filename, prefix='', offset=0, max_num=0):\n    \"\"\"Lo"
  },
  {
    "path": "code/mmcv/mmcv/image/__init__.py",
    "chars": 1169,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom .colorspace import (bgr2gray, bgr2hls, bgr2hsv, bgr2rgb, bgr2ycbcr"
  },
  {
    "path": "code/mmcv/mmcv/image/colorspace.py",
    "chars": 9908,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport cv2\nimport numpy as np\n\n\ndef imconvert(img, src, dst):\n    \"\"\"Co"
  },
  {
    "path": "code/mmcv/mmcv/image/geometric.py",
    "chars": 11276,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport cv2\nimport numpy as np\n\n\ndef _scale_size(size, scale):\n    \"\"\"Re"
  },
  {
    "path": "code/mmcv/mmcv/image/io.py",
    "chars": 8352,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport io\nimport os.path as osp\nfrom pathlib import Path\n\nimport cv2\nim"
  },
  {
    "path": "code/mmcv/mmcv/image/photometric.py",
    "chars": 2528,
    "preview": "import cv2\nimport numpy as np\n\n\ndef imnormalize(img, mean, std, to_rgb=True):\n    \"\"\"Normalize an image with mean and st"
  },
  {
    "path": "code/mmcv/mmcv/model_zoo/deprecated.json",
    "chars": 217,
    "preview": "{\n  \"resnet50_caffe\": \"detectron/resnet50_caffe\",\n  \"resnet50_caffe_bgr\": \"detectron2/resnet50_caffe_bgr\",\n  \"resnet101_"
  },
  {
    "path": "code/mmcv/mmcv/model_zoo/open_mmlab.json",
    "chars": 4757,
    "preview": "{\n  \"vgg16_caffe\": \"https://open-mmlab.s3.ap-northeast-2.amazonaws.com/pretrain/third_party/vgg16_caffe-292e1171.pth\",\n "
  },
  {
    "path": "code/mmcv/mmcv/parallel/__init__.py",
    "chars": 506,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom .collate import collate\nfrom .data_container import DataContainer\n"
  },
  {
    "path": "code/mmcv/mmcv/parallel/_functions.py",
    "chars": 2598,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport torch\nfrom torch.nn.parallel._functions import _get_stream\n\n\ndef"
  },
  {
    "path": "code/mmcv/mmcv/parallel/collate.py",
    "chars": 3715,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom collections.abc import Mapping, Sequence\n\nimport torch\nimport torc"
  },
  {
    "path": "code/mmcv/mmcv/parallel/data_container.py",
    "chars": 2366,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport functools\n\nimport torch\n\n\ndef assert_tensor_type(func):\n\n    @fu"
  },
  {
    "path": "code/mmcv/mmcv/parallel/data_parallel.py",
    "chars": 2057,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom itertools import chain\n\nfrom torch.nn.parallel import DataParallel"
  },
  {
    "path": "code/mmcv/mmcv/parallel/distributed.py",
    "chars": 3501,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport torch\nfrom torch.nn.parallel.distributed import (DistributedData"
  },
  {
    "path": "code/mmcv/mmcv/parallel/distributed_deprecated.py",
    "chars": 2720,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport torch\nimport torch.distributed as dist\nimport torch.nn as nn\nfro"
  },
  {
    "path": "code/mmcv/mmcv/parallel/registry.py",
    "chars": 264,
    "preview": "from torch.nn.parallel import DataParallel, DistributedDataParallel\n\nfrom mmcv.utils import Registry\n\nMODULE_WRAPPERS = "
  },
  {
    "path": "code/mmcv/mmcv/parallel/scatter_gather.py",
    "chars": 2124,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport torch\nfrom torch.nn.parallel._functions import Scatter as OrigSc"
  },
  {
    "path": "code/mmcv/mmcv/parallel/utils.py",
    "chars": 709,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom .registry import MODULE_WRAPPERS\n\n\ndef is_module_wrapper(module):\n"
  },
  {
    "path": "code/mmcv/mmcv/runner/__init__.py",
    "chars": 1748,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom .base_runner import BaseRunner\nfrom .checkpoint import (_load_chec"
  },
  {
    "path": "code/mmcv/mmcv/runner/base_runner.py",
    "chars": 14659,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport logging\nimport os.path as osp\nimport warnings\nfrom abc import AB"
  },
  {
    "path": "code/mmcv/mmcv/runner/checkpoint.py",
    "chars": 10515,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport os\nimport os.path as osp\nimport pkgutil\nimport time\nimport warni"
  },
  {
    "path": "code/mmcv/mmcv/runner/dist_utils.py",
    "chars": 2838,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport functools\nimport os\nimport subprocess\n\nimport torch\nimport torch"
  },
  {
    "path": "code/mmcv/mmcv/runner/epoch_based_runner.py",
    "chars": 6886,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport os.path as osp\nimport time\nimport warnings\n\nimport torch\n\nimport"
  },
  {
    "path": "code/mmcv/mmcv/runner/hooks/__init__.py",
    "chars": 848,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom .checkpoint import CheckpointHook\nfrom .closure import ClosureHook"
  },
  {
    "path": "code/mmcv/mmcv/runner/hooks/checkpoint.py",
    "chars": 3488,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport os\n\nfrom ..dist_utils import master_only\nfrom .hook import HOOKS"
  },
  {
    "path": "code/mmcv/mmcv/runner/hooks/closure.py",
    "chars": 270,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom .hook import HOOKS, Hook\n\n\n@HOOKS.register_module()\nclass ClosureH"
  },
  {
    "path": "code/mmcv/mmcv/runner/hooks/hook.py",
    "chars": 1428,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom mmcv.utils import Registry\n\nHOOKS = Registry('hook')\n\n\nclass Hook:"
  },
  {
    "path": "code/mmcv/mmcv/runner/hooks/iter_timer.py",
    "chars": 447,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport time\n\nfrom .hook import HOOKS, Hook\n\n\n@HOOKS.register_module()\nc"
  },
  {
    "path": "code/mmcv/mmcv/runner/hooks/logger/__init__.py",
    "chars": 399,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom .base import LoggerHook\nfrom .mlflow import MlflowLoggerHook\nfrom "
  },
  {
    "path": "code/mmcv/mmcv/runner/hooks/logger/base.py",
    "chars": 2148,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom abc import ABCMeta, abstractmethod\n\nfrom ..hook import Hook\n\n\nclas"
  },
  {
    "path": "code/mmcv/mmcv/runner/hooks/logger/mlflow.py",
    "chars": 2739,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport numbers\n\nfrom ...dist_utils import master_only\nfrom ..hook impor"
  },
  {
    "path": "code/mmcv/mmcv/runner/hooks/logger/pavi.py",
    "chars": 3135,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport numbers\nimport os.path as osp\n\nimport numpy as np\nimport torch\n\n"
  },
  {
    "path": "code/mmcv/mmcv/runner/hooks/logger/tensorboard.py",
    "chars": 2810,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport os.path as osp\n\nfrom mmcv.utils import TORCH_VERSION\nfrom ...dis"
  },
  {
    "path": "code/mmcv/mmcv/runner/hooks/logger/text.py",
    "chars": 6844,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport datetime\nimport os.path as osp\nfrom collections import OrderedDi"
  },
  {
    "path": "code/mmcv/mmcv/runner/hooks/logger/wandb.py",
    "chars": 1614,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport numbers\n\nfrom ...dist_utils import master_only\nfrom ..hook impor"
  },
  {
    "path": "code/mmcv/mmcv/runner/hooks/lr_updater.py",
    "chars": 15289,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom math import cos, pi\n\nfrom .hook import HOOKS, Hook\n\n\nclass LrUpdat"
  },
  {
    "path": "code/mmcv/mmcv/runner/hooks/memory.py",
    "chars": 658,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport torch\n\nfrom .hook import HOOKS, Hook\n\n\n@HOOKS.register_module()\n"
  },
  {
    "path": "code/mmcv/mmcv/runner/hooks/momentum_updater.py",
    "chars": 8155,
    "preview": "from .hook import HOOKS, Hook\nfrom .lr_updater import annealing_cos\n\n\nclass MomentumUpdaterHook(Hook):\n\n    def __init__"
  },
  {
    "path": "code/mmcv/mmcv/runner/hooks/optimizer.py",
    "chars": 970,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom torch.nn.utils import clip_grad\n\nfrom .hook import HOOKS, Hook\n\n\n@"
  },
  {
    "path": "code/mmcv/mmcv/runner/hooks/sampler_seed.py",
    "chars": 235,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom .hook import HOOKS, Hook\n\n\n@HOOKS.register_module()\nclass DistSamp"
  },
  {
    "path": "code/mmcv/mmcv/runner/iter_based_runner.py",
    "chars": 8572,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nimport os.path as osp\nimport time\n\nimport torch\nfrom torch.optim import"
  },
  {
    "path": "code/mmcv/mmcv/runner/log_buffer.py",
    "chars": 1192,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom collections import OrderedDict\n\nimport numpy as np\n\n\nclass LogBuff"
  },
  {
    "path": "code/mmcv/mmcv/runner/optimizer/__init__.py",
    "chars": 322,
    "preview": "from .builder import (OPTIMIZER_BUILDERS, OPTIMIZERS, build_optimizer,\n                      build_optimizer_constructor"
  },
  {
    "path": "code/mmcv/mmcv/runner/optimizer/builder.py",
    "chars": 1298,
    "preview": "import copy\nimport inspect\n\nimport torch\n\nfrom ...utils import Registry, build_from_cfg\n\nOPTIMIZERS = Registry('optimize"
  },
  {
    "path": "code/mmcv/mmcv/runner/optimizer/default_constructor.py",
    "chars": 9618,
    "preview": "import warnings\n\nimport torch\nfrom torch.nn import GroupNorm, LayerNorm\n\nfrom mmcv.utils import _BatchNorm, _InstanceNor"
  },
  {
    "path": "code/mmcv/mmcv/runner/priority.py",
    "chars": 1385,
    "preview": "# Copyright (c) Open-MMLab. All rights reserved.\nfrom enum import Enum\n\n\nclass Priority(Enum):\n    \"\"\"Hook priority leve"
  }
]

// ... and 461 more files (download for full content)

About this extraction

This page contains the full source code of the Duankaiwen/LSNet GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 661 files (5.0 MB), approximately 1.3M tokens, and a symbol index with 2934 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!