{
  "_format": "hh-sol-artifact-1",
  "contractName": "Web3Site",
  "sourceName": "contracts/Web3Site.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_dpr",
          "type": "address"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "bool",
                  "name": "immutableFlag",
                  "type": "bool"
                },
                {
                  "internalType": "enum CachePreset",
                  "name": "preset",
                  "type": "uint8"
                },
                {
                  "internalType": "string",
                  "name": "custom",
                  "type": "string"
                }
              ],
              "internalType": "struct CacheControl",
              "name": "cache",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "methods",
                  "type": "uint16"
                },
                {
                  "internalType": "bytes32[]",
                  "name": "origins",
                  "type": "bytes32[]"
                },
                {
                  "internalType": "enum CORSPreset",
                  "name": "preset",
                  "type": "uint8"
                },
                {
                  "internalType": "string",
                  "name": "custom",
                  "type": "string"
                }
              ],
              "internalType": "struct CORSPolicy",
              "name": "cors",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "code",
                  "type": "uint16"
                },
                {
                  "internalType": "string",
                  "name": "location",
                  "type": "string"
                }
              ],
              "internalType": "struct Redirect",
              "name": "redirect",
              "type": "tuple"
            }
          ],
          "internalType": "struct HeaderInfo",
          "name": "_defaultHeader",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AccessControlBadConfirmation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "neededRole",
          "type": "bytes32"
        }
      ],
      "name": "AccessControlUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "bool",
                  "name": "immutableFlag",
                  "type": "bool"
                },
                {
                  "internalType": "enum CachePreset",
                  "name": "preset",
                  "type": "uint8"
                },
                {
                  "internalType": "string",
                  "name": "custom",
                  "type": "string"
                }
              ],
              "internalType": "struct CacheControl",
              "name": "cache",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "methods",
                  "type": "uint16"
                },
                {
                  "internalType": "bytes32[]",
                  "name": "origins",
                  "type": "bytes32[]"
                },
                {
                  "internalType": "enum CORSPreset",
                  "name": "preset",
                  "type": "uint8"
                },
                {
                  "internalType": "string",
                  "name": "custom",
                  "type": "string"
                }
              ],
              "internalType": "struct CORSPolicy",
              "name": "cors",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "code",
                  "type": "uint16"
                },
                {
                  "internalType": "string",
                  "name": "location",
                  "type": "string"
                }
              ],
              "internalType": "struct Redirect",
              "name": "redirect",
              "type": "tuple"
            }
          ],
          "internalType": "struct HeaderInfo",
          "name": "header",
          "type": "tuple"
        }
      ],
      "name": "InvalidHeader",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "InvalidRole",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "reason",
          "type": "string"
        },
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "_403",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "reason",
          "type": "string"
        },
        {
          "internalType": "bool",
          "name": "isImmutable",
          "type": "bool"
        }
      ],
      "name": "_404",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "reason",
          "type": "string"
        },
        {
          "internalType": "uint16",
          "name": "methodsAllowed",
          "type": "uint16"
        },
        {
          "internalType": "bool",
          "name": "isImmutable",
          "type": "bool"
        }
      ],
      "name": "_405",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "reason",
          "type": "string"
        },
        {
          "components": [
            {
              "internalType": "int256",
              "name": "start",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "end",
              "type": "int256"
            }
          ],
          "internalType": "struct Range",
          "name": "range",
          "type": "tuple"
        },
        {
          "internalType": "int256",
          "name": "outOfBounds",
          "type": "int256"
        }
      ],
      "name": "_416",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "status",
                  "type": "uint16"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "bool",
                          "name": "immutableFlag",
                          "type": "bool"
                        },
                        {
                          "internalType": "enum CachePreset",
                          "name": "preset",
                          "type": "uint8"
                        },
                        {
                          "internalType": "string",
                          "name": "custom",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct CacheControl",
                      "name": "cache",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint16",
                          "name": "methods",
                          "type": "uint16"
                        },
                        {
                          "internalType": "bytes32[]",
                          "name": "origins",
                          "type": "bytes32[]"
                        },
                        {
                          "internalType": "enum CORSPreset",
                          "name": "preset",
                          "type": "uint8"
                        },
                        {
                          "internalType": "string",
                          "name": "custom",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct CORSPolicy",
                      "name": "cors",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint16",
                          "name": "code",
                          "type": "uint16"
                        },
                        {
                          "internalType": "string",
                          "name": "location",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct Redirect",
                      "name": "redirect",
                      "type": "tuple"
                    }
                  ],
                  "internalType": "struct HeaderInfo",
                  "name": "headerInfo",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "bytes2",
                          "name": "mimeType",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "charset",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "encoding",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "language",
                          "type": "bytes2"
                        }
                      ],
                      "internalType": "struct ResourceProperties",
                      "name": "properties",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "size",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "version",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "lastModified",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "header",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ResourceMetadata",
                  "name": "metadata",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes32",
                  "name": "etag",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct HEADResponse",
              "name": "head",
              "type": "tuple"
            },
            {
              "internalType": "bytes32",
              "name": "headerAddress",
              "type": "bytes32"
            }
          ],
          "indexed": false,
          "internalType": "struct DEFINEResponse",
          "name": "response",
          "type": "tuple"
        }
      ],
      "name": "DEFINESuccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "status",
              "type": "uint16"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "bool",
                      "name": "immutableFlag",
                      "type": "bool"
                    },
                    {
                      "internalType": "enum CachePreset",
                      "name": "preset",
                      "type": "uint8"
                    },
                    {
                      "internalType": "string",
                      "name": "custom",
                      "type": "string"
                    }
                  ],
                  "internalType": "struct CacheControl",
                  "name": "cache",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "uint16",
                      "name": "methods",
                      "type": "uint16"
                    },
                    {
                      "internalType": "bytes32[]",
                      "name": "origins",
                      "type": "bytes32[]"
                    },
                    {
                      "internalType": "enum CORSPreset",
                      "name": "preset",
                      "type": "uint8"
                    },
                    {
                      "internalType": "string",
                      "name": "custom",
                      "type": "string"
                    }
                  ],
                  "internalType": "struct CORSPolicy",
                  "name": "cors",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "uint16",
                      "name": "code",
                      "type": "uint16"
                    },
                    {
                      "internalType": "string",
                      "name": "location",
                      "type": "string"
                    }
                  ],
                  "internalType": "struct Redirect",
                  "name": "redirect",
                  "type": "tuple"
                }
              ],
              "internalType": "struct HeaderInfo",
              "name": "headerInfo",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "bytes2",
                      "name": "mimeType",
                      "type": "bytes2"
                    },
                    {
                      "internalType": "bytes2",
                      "name": "charset",
                      "type": "bytes2"
                    },
                    {
                      "internalType": "bytes2",
                      "name": "encoding",
                      "type": "bytes2"
                    },
                    {
                      "internalType": "bytes2",
                      "name": "language",
                      "type": "bytes2"
                    }
                  ],
                  "internalType": "struct ResourceProperties",
                  "name": "properties",
                  "type": "tuple"
                },
                {
                  "internalType": "uint256",
                  "name": "size",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "version",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "lastModified",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes32",
                  "name": "header",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct ResourceMetadata",
              "name": "metadata",
              "type": "tuple"
            },
            {
              "internalType": "bytes32",
              "name": "etag",
              "type": "bytes32"
            }
          ],
          "indexed": false,
          "internalType": "struct HEADResponse",
          "name": "response",
          "type": "tuple"
        }
      ],
      "name": "DELETESuccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "headerAddress",
          "type": "bytes32"
        }
      ],
      "name": "HeaderCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "headerAddress",
          "type": "bytes32"
        }
      ],
      "name": "HeaderUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "path",
          "type": "string"
        }
      ],
      "name": "MetadataDeleted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "path",
          "type": "string"
        }
      ],
      "name": "MetadataUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "status",
                  "type": "uint16"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "bool",
                          "name": "immutableFlag",
                          "type": "bool"
                        },
                        {
                          "internalType": "enum CachePreset",
                          "name": "preset",
                          "type": "uint8"
                        },
                        {
                          "internalType": "string",
                          "name": "custom",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct CacheControl",
                      "name": "cache",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint16",
                          "name": "methods",
                          "type": "uint16"
                        },
                        {
                          "internalType": "bytes32[]",
                          "name": "origins",
                          "type": "bytes32[]"
                        },
                        {
                          "internalType": "enum CORSPreset",
                          "name": "preset",
                          "type": "uint8"
                        },
                        {
                          "internalType": "string",
                          "name": "custom",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct CORSPolicy",
                      "name": "cors",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint16",
                          "name": "code",
                          "type": "uint16"
                        },
                        {
                          "internalType": "string",
                          "name": "location",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct Redirect",
                      "name": "redirect",
                      "type": "tuple"
                    }
                  ],
                  "internalType": "struct HeaderInfo",
                  "name": "headerInfo",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "bytes2",
                          "name": "mimeType",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "charset",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "encoding",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "language",
                          "type": "bytes2"
                        }
                      ],
                      "internalType": "struct ResourceProperties",
                      "name": "properties",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "size",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "version",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "lastModified",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "header",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ResourceMetadata",
                  "name": "metadata",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes32",
                  "name": "etag",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct HEADResponse",
              "name": "head",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32[]",
                  "name": "dataPoints",
                  "type": "bytes32[]"
                },
                {
                  "internalType": "uint256",
                  "name": "totalChunks",
                  "type": "uint256"
                }
              ],
              "internalType": "struct ResourceResponse",
              "name": "resource",
              "type": "tuple"
            }
          ],
          "indexed": false,
          "internalType": "struct LOCATEResponse",
          "name": "response",
          "type": "tuple"
        }
      ],
      "name": "PATCHSuccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "status",
                  "type": "uint16"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "bool",
                          "name": "immutableFlag",
                          "type": "bool"
                        },
                        {
                          "internalType": "enum CachePreset",
                          "name": "preset",
                          "type": "uint8"
                        },
                        {
                          "internalType": "string",
                          "name": "custom",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct CacheControl",
                      "name": "cache",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint16",
                          "name": "methods",
                          "type": "uint16"
                        },
                        {
                          "internalType": "bytes32[]",
                          "name": "origins",
                          "type": "bytes32[]"
                        },
                        {
                          "internalType": "enum CORSPreset",
                          "name": "preset",
                          "type": "uint8"
                        },
                        {
                          "internalType": "string",
                          "name": "custom",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct CORSPolicy",
                      "name": "cors",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint16",
                          "name": "code",
                          "type": "uint16"
                        },
                        {
                          "internalType": "string",
                          "name": "location",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct Redirect",
                      "name": "redirect",
                      "type": "tuple"
                    }
                  ],
                  "internalType": "struct HeaderInfo",
                  "name": "headerInfo",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "bytes2",
                          "name": "mimeType",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "charset",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "encoding",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "language",
                          "type": "bytes2"
                        }
                      ],
                      "internalType": "struct ResourceProperties",
                      "name": "properties",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "size",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "version",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "lastModified",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "header",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ResourceMetadata",
                  "name": "metadata",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes32",
                  "name": "etag",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct HEADResponse",
              "name": "head",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32[]",
                  "name": "dataPoints",
                  "type": "bytes32[]"
                },
                {
                  "internalType": "uint256",
                  "name": "totalChunks",
                  "type": "uint256"
                }
              ],
              "internalType": "struct ResourceResponse",
              "name": "resource",
              "type": "tuple"
            }
          ],
          "indexed": false,
          "internalType": "struct LOCATEResponse",
          "name": "response",
          "type": "tuple"
        }
      ],
      "name": "PUTSuccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "path",
          "type": "string"
        }
      ],
      "name": "ResourceCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "path",
          "type": "string"
        }
      ],
      "name": "ResourceDeleted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "ResourceRoleCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "path",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "chunkIndex",
          "type": "uint256"
        }
      ],
      "name": "ResourceUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "oldSiteAdmin",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "newSiteAdmin",
          "type": "bytes32"
        }
      ],
      "name": "SiteAdminChanged",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "path",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "ifModifiedSince",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes32",
                  "name": "ifNoneMatch",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct HEADRequest",
              "name": "head",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "bool",
                      "name": "immutableFlag",
                      "type": "bool"
                    },
                    {
                      "internalType": "enum CachePreset",
                      "name": "preset",
                      "type": "uint8"
                    },
                    {
                      "internalType": "string",
                      "name": "custom",
                      "type": "string"
                    }
                  ],
                  "internalType": "struct CacheControl",
                  "name": "cache",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "uint16",
                      "name": "methods",
                      "type": "uint16"
                    },
                    {
                      "internalType": "bytes32[]",
                      "name": "origins",
                      "type": "bytes32[]"
                    },
                    {
                      "internalType": "enum CORSPreset",
                      "name": "preset",
                      "type": "uint8"
                    },
                    {
                      "internalType": "string",
                      "name": "custom",
                      "type": "string"
                    }
                  ],
                  "internalType": "struct CORSPolicy",
                  "name": "cors",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "uint16",
                      "name": "code",
                      "type": "uint16"
                    },
                    {
                      "internalType": "string",
                      "name": "location",
                      "type": "string"
                    }
                  ],
                  "internalType": "struct Redirect",
                  "name": "redirect",
                  "type": "tuple"
                }
              ],
              "internalType": "struct HeaderInfo",
              "name": "data",
              "type": "tuple"
            }
          ],
          "internalType": "struct DEFINERequest",
          "name": "defineRequest",
          "type": "tuple"
        }
      ],
      "name": "DEFINE",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "status",
                  "type": "uint16"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "bool",
                          "name": "immutableFlag",
                          "type": "bool"
                        },
                        {
                          "internalType": "enum CachePreset",
                          "name": "preset",
                          "type": "uint8"
                        },
                        {
                          "internalType": "string",
                          "name": "custom",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct CacheControl",
                      "name": "cache",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint16",
                          "name": "methods",
                          "type": "uint16"
                        },
                        {
                          "internalType": "bytes32[]",
                          "name": "origins",
                          "type": "bytes32[]"
                        },
                        {
                          "internalType": "enum CORSPreset",
                          "name": "preset",
                          "type": "uint8"
                        },
                        {
                          "internalType": "string",
                          "name": "custom",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct CORSPolicy",
                      "name": "cors",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint16",
                          "name": "code",
                          "type": "uint16"
                        },
                        {
                          "internalType": "string",
                          "name": "location",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct Redirect",
                      "name": "redirect",
                      "type": "tuple"
                    }
                  ],
                  "internalType": "struct HeaderInfo",
                  "name": "headerInfo",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "bytes2",
                          "name": "mimeType",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "charset",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "encoding",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "language",
                          "type": "bytes2"
                        }
                      ],
                      "internalType": "struct ResourceProperties",
                      "name": "properties",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "size",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "version",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "lastModified",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "header",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ResourceMetadata",
                  "name": "metadata",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes32",
                  "name": "etag",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct HEADResponse",
              "name": "head",
              "type": "tuple"
            },
            {
              "internalType": "bytes32",
              "name": "headerAddress",
              "type": "bytes32"
            }
          ],
          "internalType": "struct DEFINEResponse",
          "name": "defineResponse",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "path",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "ifModifiedSince",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "ifNoneMatch",
              "type": "bytes32"
            }
          ],
          "internalType": "struct HEADRequest",
          "name": "deleteRequest",
          "type": "tuple"
        }
      ],
      "name": "DELETE",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "status",
              "type": "uint16"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "bool",
                      "name": "immutableFlag",
                      "type": "bool"
                    },
                    {
                      "internalType": "enum CachePreset",
                      "name": "preset",
                      "type": "uint8"
                    },
                    {
                      "internalType": "string",
                      "name": "custom",
                      "type": "string"
                    }
                  ],
                  "internalType": "struct CacheControl",
                  "name": "cache",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "uint16",
                      "name": "methods",
                      "type": "uint16"
                    },
                    {
                      "internalType": "bytes32[]",
                      "name": "origins",
                      "type": "bytes32[]"
                    },
                    {
                      "internalType": "enum CORSPreset",
                      "name": "preset",
                      "type": "uint8"
                    },
                    {
                      "internalType": "string",
                      "name": "custom",
                      "type": "string"
                    }
                  ],
                  "internalType": "struct CORSPolicy",
                  "name": "cors",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "uint16",
                      "name": "code",
                      "type": "uint16"
                    },
                    {
                      "internalType": "string",
                      "name": "location",
                      "type": "string"
                    }
                  ],
                  "internalType": "struct Redirect",
                  "name": "redirect",
                  "type": "tuple"
                }
              ],
              "internalType": "struct HeaderInfo",
              "name": "headerInfo",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "bytes2",
                      "name": "mimeType",
                      "type": "bytes2"
                    },
                    {
                      "internalType": "bytes2",
                      "name": "charset",
                      "type": "bytes2"
                    },
                    {
                      "internalType": "bytes2",
                      "name": "encoding",
                      "type": "bytes2"
                    },
                    {
                      "internalType": "bytes2",
                      "name": "language",
                      "type": "bytes2"
                    }
                  ],
                  "internalType": "struct ResourceProperties",
                  "name": "properties",
                  "type": "tuple"
                },
                {
                  "internalType": "uint256",
                  "name": "size",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "version",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "lastModified",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes32",
                  "name": "header",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct ResourceMetadata",
              "name": "metadata",
              "type": "tuple"
            },
            {
              "internalType": "bytes32",
              "name": "etag",
              "type": "bytes32"
            }
          ],
          "internalType": "struct HEADResponse",
          "name": "deleteResponse",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DPR",
      "outputs": [
        {
          "internalType": "contract IDataPointRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DPS",
      "outputs": [
        {
          "internalType": "contract IDataPointStorage",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "path",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "ifModifiedSince",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes32",
                  "name": "ifNoneMatch",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct HEADRequest",
              "name": "head",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "int256",
                  "name": "start",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "end",
                  "type": "int256"
                }
              ],
              "internalType": "struct Range",
              "name": "rangeChunks",
              "type": "tuple"
            }
          ],
          "internalType": "struct LOCATERequest",
          "name": "getRequest",
          "type": "tuple"
        }
      ],
      "name": "GET",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "status",
                  "type": "uint16"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "bool",
                          "name": "immutableFlag",
                          "type": "bool"
                        },
                        {
                          "internalType": "enum CachePreset",
                          "name": "preset",
                          "type": "uint8"
                        },
                        {
                          "internalType": "string",
                          "name": "custom",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct CacheControl",
                      "name": "cache",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint16",
                          "name": "methods",
                          "type": "uint16"
                        },
                        {
                          "internalType": "bytes32[]",
                          "name": "origins",
                          "type": "bytes32[]"
                        },
                        {
                          "internalType": "enum CORSPreset",
                          "name": "preset",
                          "type": "uint8"
                        },
                        {
                          "internalType": "string",
                          "name": "custom",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct CORSPolicy",
                      "name": "cors",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint16",
                          "name": "code",
                          "type": "uint16"
                        },
                        {
                          "internalType": "string",
                          "name": "location",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct Redirect",
                      "name": "redirect",
                      "type": "tuple"
                    }
                  ],
                  "internalType": "struct HeaderInfo",
                  "name": "headerInfo",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "bytes2",
                          "name": "mimeType",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "charset",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "encoding",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "language",
                          "type": "bytes2"
                        }
                      ],
                      "internalType": "struct ResourceProperties",
                      "name": "properties",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "size",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "version",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "lastModified",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "header",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ResourceMetadata",
                  "name": "metadata",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes32",
                  "name": "etag",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct HEADResponse",
              "name": "head",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32[]",
                  "name": "dataPoints",
                  "type": "bytes32[]"
                },
                {
                  "internalType": "uint256",
                  "name": "totalChunks",
                  "type": "uint256"
                }
              ],
              "internalType": "struct ResourceResponse",
              "name": "resource",
              "type": "tuple"
            }
          ],
          "internalType": "struct LOCATEResponse",
          "name": "getResponse",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "path",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "ifModifiedSince",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "ifNoneMatch",
              "type": "bytes32"
            }
          ],
          "internalType": "struct HEADRequest",
          "name": "headRequest",
          "type": "tuple"
        }
      ],
      "name": "HEAD",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "status",
              "type": "uint16"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "bool",
                      "name": "immutableFlag",
                      "type": "bool"
                    },
                    {
                      "internalType": "enum CachePreset",
                      "name": "preset",
                      "type": "uint8"
                    },
                    {
                      "internalType": "string",
                      "name": "custom",
                      "type": "string"
                    }
                  ],
                  "internalType": "struct CacheControl",
                  "name": "cache",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "uint16",
                      "name": "methods",
                      "type": "uint16"
                    },
                    {
                      "internalType": "bytes32[]",
                      "name": "origins",
                      "type": "bytes32[]"
                    },
                    {
                      "internalType": "enum CORSPreset",
                      "name": "preset",
                      "type": "uint8"
                    },
                    {
                      "internalType": "string",
                      "name": "custom",
                      "type": "string"
                    }
                  ],
                  "internalType": "struct CORSPolicy",
                  "name": "cors",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "uint16",
                      "name": "code",
                      "type": "uint16"
                    },
                    {
                      "internalType": "string",
                      "name": "location",
                      "type": "string"
                    }
                  ],
                  "internalType": "struct Redirect",
                  "name": "redirect",
                  "type": "tuple"
                }
              ],
              "internalType": "struct HeaderInfo",
              "name": "headerInfo",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "bytes2",
                      "name": "mimeType",
                      "type": "bytes2"
                    },
                    {
                      "internalType": "bytes2",
                      "name": "charset",
                      "type": "bytes2"
                    },
                    {
                      "internalType": "bytes2",
                      "name": "encoding",
                      "type": "bytes2"
                    },
                    {
                      "internalType": "bytes2",
                      "name": "language",
                      "type": "bytes2"
                    }
                  ],
                  "internalType": "struct ResourceProperties",
                  "name": "properties",
                  "type": "tuple"
                },
                {
                  "internalType": "uint256",
                  "name": "size",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "version",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "lastModified",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes32",
                  "name": "header",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct ResourceMetadata",
              "name": "metadata",
              "type": "tuple"
            },
            {
              "internalType": "bytes32",
              "name": "etag",
              "type": "bytes32"
            }
          ],
          "internalType": "struct HEADResponse",
          "name": "head",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_path",
          "type": "string"
        }
      ],
      "name": "OPTIONS",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "status",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "allow",
              "type": "uint16"
            }
          ],
          "internalType": "struct OPTIONSResponse",
          "name": "optionsResponse",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "path",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "ifModifiedSince",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes32",
                  "name": "ifNoneMatch",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct HEADRequest",
              "name": "head",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "chunkIndex",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "publisher",
                  "type": "address"
                }
              ],
              "internalType": "struct DataRegistration[]",
              "name": "data",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct PATCHRequest",
          "name": "patchRequest",
          "type": "tuple"
        }
      ],
      "name": "PATCH",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "status",
                  "type": "uint16"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "bool",
                          "name": "immutableFlag",
                          "type": "bool"
                        },
                        {
                          "internalType": "enum CachePreset",
                          "name": "preset",
                          "type": "uint8"
                        },
                        {
                          "internalType": "string",
                          "name": "custom",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct CacheControl",
                      "name": "cache",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint16",
                          "name": "methods",
                          "type": "uint16"
                        },
                        {
                          "internalType": "bytes32[]",
                          "name": "origins",
                          "type": "bytes32[]"
                        },
                        {
                          "internalType": "enum CORSPreset",
                          "name": "preset",
                          "type": "uint8"
                        },
                        {
                          "internalType": "string",
                          "name": "custom",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct CORSPolicy",
                      "name": "cors",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint16",
                          "name": "code",
                          "type": "uint16"
                        },
                        {
                          "internalType": "string",
                          "name": "location",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct Redirect",
                      "name": "redirect",
                      "type": "tuple"
                    }
                  ],
                  "internalType": "struct HeaderInfo",
                  "name": "headerInfo",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "bytes2",
                          "name": "mimeType",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "charset",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "encoding",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "language",
                          "type": "bytes2"
                        }
                      ],
                      "internalType": "struct ResourceProperties",
                      "name": "properties",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "size",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "version",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "lastModified",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "header",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ResourceMetadata",
                  "name": "metadata",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes32",
                  "name": "etag",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct HEADResponse",
              "name": "head",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32[]",
                  "name": "dataPoints",
                  "type": "bytes32[]"
                },
                {
                  "internalType": "uint256",
                  "name": "totalChunks",
                  "type": "uint256"
                }
              ],
              "internalType": "struct ResourceResponse",
              "name": "resource",
              "type": "tuple"
            }
          ],
          "internalType": "struct LOCATEResponse",
          "name": "patchResponse",
          "type": "tuple"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "path",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "ifModifiedSince",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes32",
                  "name": "ifNoneMatch",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct HEADRequest",
              "name": "head",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes2",
                  "name": "mimeType",
                  "type": "bytes2"
                },
                {
                  "internalType": "bytes2",
                  "name": "charset",
                  "type": "bytes2"
                },
                {
                  "internalType": "bytes2",
                  "name": "encoding",
                  "type": "bytes2"
                },
                {
                  "internalType": "bytes2",
                  "name": "language",
                  "type": "bytes2"
                }
              ],
              "internalType": "struct ResourceProperties",
              "name": "properties",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "chunkIndex",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "publisher",
                  "type": "address"
                }
              ],
              "internalType": "struct DataRegistration[]",
              "name": "data",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct PUTRequest",
          "name": "putRequest",
          "type": "tuple"
        }
      ],
      "name": "PUT",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "status",
                  "type": "uint16"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "bool",
                          "name": "immutableFlag",
                          "type": "bool"
                        },
                        {
                          "internalType": "enum CachePreset",
                          "name": "preset",
                          "type": "uint8"
                        },
                        {
                          "internalType": "string",
                          "name": "custom",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct CacheControl",
                      "name": "cache",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint16",
                          "name": "methods",
                          "type": "uint16"
                        },
                        {
                          "internalType": "bytes32[]",
                          "name": "origins",
                          "type": "bytes32[]"
                        },
                        {
                          "internalType": "enum CORSPreset",
                          "name": "preset",
                          "type": "uint8"
                        },
                        {
                          "internalType": "string",
                          "name": "custom",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct CORSPolicy",
                      "name": "cors",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint16",
                          "name": "code",
                          "type": "uint16"
                        },
                        {
                          "internalType": "string",
                          "name": "location",
                          "type": "string"
                        }
                      ],
                      "internalType": "struct Redirect",
                      "name": "redirect",
                      "type": "tuple"
                    }
                  ],
                  "internalType": "struct HeaderInfo",
                  "name": "headerInfo",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "bytes2",
                          "name": "mimeType",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "charset",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "encoding",
                          "type": "bytes2"
                        },
                        {
                          "internalType": "bytes2",
                          "name": "language",
                          "type": "bytes2"
                        }
                      ],
                      "internalType": "struct ResourceProperties",
                      "name": "properties",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "size",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "version",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "lastModified",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "header",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ResourceMetadata",
                  "name": "metadata",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes32",
                  "name": "etag",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct HEADResponse",
              "name": "head",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32[]",
                  "name": "dataPoints",
                  "type": "bytes32[]"
                },
                {
                  "internalType": "uint256",
                  "name": "totalChunks",
                  "type": "uint256"
                }
              ],
              "internalType": "struct ResourceResponse",
              "name": "resource",
              "type": "tuple"
            }
          ],
          "internalType": "struct LOCATEResponse",
          "name": "putResponse",
          "type": "tuple"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_newSiteAdmin",
          "type": "bytes32"
        }
      ],
      "name": "changeSiteAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_role",
          "type": "bytes32"
        }
      ],
      "name": "createResourceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getSiteAdminRole",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "callerConfirmation",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "bool",
                  "name": "immutableFlag",
                  "type": "bool"
                },
                {
                  "internalType": "enum CachePreset",
                  "name": "preset",
                  "type": "uint8"
                },
                {
                  "internalType": "string",
                  "name": "custom",
                  "type": "string"
                }
              ],
              "internalType": "struct CacheControl",
              "name": "cache",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "methods",
                  "type": "uint16"
                },
                {
                  "internalType": "bytes32[]",
                  "name": "origins",
                  "type": "bytes32[]"
                },
                {
                  "internalType": "enum CORSPreset",
                  "name": "preset",
                  "type": "uint8"
                },
                {
                  "internalType": "string",
                  "name": "custom",
                  "type": "string"
                }
              ],
              "internalType": "struct CORSPolicy",
              "name": "cors",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "code",
                  "type": "uint16"
                },
                {
                  "internalType": "string",
                  "name": "location",
                  "type": "string"
                }
              ],
              "internalType": "struct Redirect",
              "name": "redirect",
              "type": "tuple"
            }
          ],
          "internalType": "struct HeaderInfo",
          "name": "_defaultHeader",
          "type": "tuple"
        }
      ],
      "name": "setDefaultHeader",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506040516169b33803806169b383398181016040528101906100329190610c7b565b82828281837fe883badc8743699137027ae6ca9d40716b522f64bf5b61a15f071a2371479c926001819055506100716000801b826100e460201b60201c565b506100876001546000801b6101e160201b60201c565b5080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506100d98161024260201b60201c565b5050505050506113c8565b60006100f6838361025860201b60201c565b6101d657600160008085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506101736102f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506101db565b600090505b92915050565b60006101f2836102fe60201b60201c565b905081600080858152602001908152602001600020600101819055508181847fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a4505050565b6102556000801b8261031d60201b60201c565b50565b600061026d6000801b8361059660201b60201c565b1561027b57600190506102f0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b83036102dd576102d57f22435ed027edf5f902dc0093fbc24cdb50c05b5fd5f311b78c67c1cbaff60e138361059660201b60201c565b1590506102f0565b6102ed838361059660201b60201c565b90505b92915050565b600033905090565b6000806000838152602001908152602001600020600101549050919050565b6000816040015160000151905060008161ffff1614158015610354575061012c8161ffff16108061035357506101368161ffff16115b5b1561039657816040517f3afff42b00000000000000000000000000000000000000000000000000000000815260040161038d919061102f565b60405180910390fd5b60008260200151602001515190506103b261060060201b60201c565b61ffff168160ff16146103fc57826040517f3afff42b0000000000000000000000000000000000000000000000000000000081526004016103f3919061102f565b60405180910390fd5b826010600086815260200190815260200160002060008201518160000160008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff0219169083600681111561046457610463610cf9565b5b0217905550604082015181600101908161047e9190611267565b50505060208201518160020160008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160010190805190602001906104c9929190610626565b5060408201518160020160006101000a81548160ff021916908360058111156104f5576104f4610cf9565b5b0217905550606082015181600301908161050f9190611267565b50505060408201518160060160008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160010190816105539190611267565b5050509050507fc4c76143cbd497adc2b5bc159d932dcfa8483928a0d22661d1404ef1c68984a1846040516105889190611348565b60405180910390a150505050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600160088081111561061757610616610cf9565b5b6106219190611392565b905090565b828054828255906000526020600020908101928215610662579160200282015b82811115610661578251825591602001919060010190610646565b5b50905061066f9190610673565b5090565b5b8082111561068c576000816000905550600101610674565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006106cf826106a4565b9050919050565b6106df816106c4565b81146106ea57600080fd5b50565b6000815190506106fc816106d6565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61075082610707565b810181811067ffffffffffffffff8211171561076f5761076e610718565b5b80604052505050565b6000610782610690565b905061078e8282610747565b919050565b600080fd5b60008115159050919050565b6107ad81610798565b81146107b857600080fd5b50565b6000815190506107ca816107a4565b92915050565b600781106107dd57600080fd5b50565b6000815190506107ef816107d0565b92915050565b600080fd5b600080fd5b600067ffffffffffffffff82111561081a57610819610718565b5b61082382610707565b9050602081019050919050565b60005b8381101561084e578082015181840152602081019050610833565b60008484015250505050565b600061086d610868846107ff565b610778565b905082815260208101848484011115610889576108886107fa565b5b610894848285610830565b509392505050565b600082601f8301126108b1576108b06107f5565b5b81516108c184826020860161085a565b91505092915050565b6000606082840312156108e0576108df610702565b5b6108ea6060610778565b905060006108fa848285016107bb565b600083015250602061090e848285016107e0565b602083015250604082015167ffffffffffffffff81111561093257610931610793565b5b61093e8482850161089c565b60408301525092915050565b600061ffff82169050919050565b6109618161094a565b811461096c57600080fd5b50565b60008151905061097e81610958565b92915050565b600067ffffffffffffffff82111561099f5761099e610718565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b6109c8816109b5565b81146109d357600080fd5b50565b6000815190506109e5816109bf565b92915050565b60006109fe6109f984610984565b610778565b90508083825260208201905060208402830185811115610a2157610a206109b0565b5b835b81811015610a4a5780610a3688826109d6565b845260208401935050602081019050610a23565b5050509392505050565b600082601f830112610a6957610a686107f5565b5b8151610a798482602086016109eb565b91505092915050565b60068110610a8f57600080fd5b50565b600081519050610aa181610a82565b92915050565b600060808284031215610abd57610abc610702565b5b610ac76080610778565b90506000610ad78482850161096f565b600083015250602082015167ffffffffffffffff811115610afb57610afa610793565b5b610b0784828501610a54565b6020830152506040610b1b84828501610a92565b604083015250606082015167ffffffffffffffff811115610b3f57610b3e610793565b5b610b4b8482850161089c565b60608301525092915050565b600060408284031215610b6d57610b6c610702565b5b610b776040610778565b90506000610b878482850161096f565b600083015250602082015167ffffffffffffffff811115610bab57610baa610793565b5b610bb78482850161089c565b60208301525092915050565b600060608284031215610bd957610bd8610702565b5b610be36060610778565b9050600082015167ffffffffffffffff811115610c0357610c02610793565b5b610c0f848285016108ca565b600083015250602082015167ffffffffffffffff811115610c3357610c32610793565b5b610c3f84828501610aa7565b602083015250604082015167ffffffffffffffff811115610c6357610c62610793565b5b610c6f84828501610b57565b60408301525092915050565b600080600060608486031215610c9457610c9361069a565b5b6000610ca2868287016106ed565b9350506020610cb3868287016106ed565b925050604084015167ffffffffffffffff811115610cd457610cd361069f565b5b610ce086828701610bc3565b9150509250925092565b610cf381610798565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60078110610d3957610d38610cf9565b5b50565b6000819050610d4a82610d28565b919050565b6000610d5a82610d3c565b9050919050565b610d6a81610d4f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000610d9782610d70565b610da18185610d7b565b9350610db1818560208601610830565b610dba81610707565b840191505092915050565b6000606083016000830151610ddd6000860182610cea565b506020830151610df06020860182610d61565b5060408301518482036040860152610e088282610d8c565b9150508091505092915050565b610e1e8161094a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610e59816109b5565b82525050565b6000610e6b8383610e50565b60208301905092915050565b6000602082019050919050565b6000610e8f82610e24565b610e998185610e2f565b9350610ea483610e40565b8060005b83811015610ed5578151610ebc8882610e5f565b9750610ec783610e77565b925050600181019050610ea8565b5085935050505092915050565b60068110610ef357610ef2610cf9565b5b50565b6000819050610f0482610ee2565b919050565b6000610f1482610ef6565b9050919050565b610f2481610f09565b82525050565b6000608083016000830151610f426000860182610e15565b5060208301518482036020860152610f5a8282610e84565b9150506040830151610f6f6040860182610f1b565b5060608301518482036060860152610f878282610d8c565b9150508091505092915050565b6000604083016000830151610fac6000860182610e15565b5060208301518482036020860152610fc48282610d8c565b9150508091505092915050565b60006060830160008301518482036000860152610fee8282610dc5565b915050602083015184820360208601526110088282610f2a565b915050604083015184820360408601526110228282610f94565b9150508091505092915050565b600060208201905081810360008301526110498184610fd1565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061109857607f821691505b6020821081036110ab576110aa611051565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026111137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826110d6565b61111d86836110d6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600061116461115f61115a84611135565b61113f565b611135565b9050919050565b6000819050919050565b61117e83611149565b61119261118a8261116b565b8484546110e3565b825550505050565b600090565b6111a761119a565b6111b2818484611175565b505050565b5b818110156111d6576111cb60008261119f565b6001810190506111b8565b5050565b601f82111561121b576111ec816110b1565b6111f5846110c6565b81016020851015611204578190505b611218611210856110c6565b8301826111b7565b50505b505050565b600082821c905092915050565b600061123e60001984600802611220565b1980831691505092915050565b6000611257838361122d565b9150826002028217905092915050565b61127082610d70565b67ffffffffffffffff81111561128957611288610718565b5b6112938254611080565b61129e8282856111da565b600060209050601f8311600181146112d157600084156112bf578287015190505b6112c9858261124b565b865550611331565b601f1984166112df866110b1565b60005b82811015611307578489015182556001820191506020850194506020810190506112e2565b868310156113245784890151611320601f89168261122d565b8355505b6001600288020188555050505b505050505050565b611342816109b5565b82525050565b600060208201905061135d6000830184611339565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061139d8261094a565b91506113a88361094a565b9250828201905061ffff8111156113c2576113c1611363565b5b92915050565b6155dc806113d76000396000f3fe60806040526004361061011f5760003560e01c806391d14854116100a0578063ca63628c11610064578063ca63628c14610410578063d547741f1461044d578063dd0fec4c14610476578063ef4e06ec146104a6578063fd05b634146104d15761011f565b806391d1485414610324578063a217fddf14610361578063b0184e011461038c578063b2455654146103bc578063c2640ed1146103e55761011f565b80632f2ff15d116100e75780632f2ff15d1461024157806332729d5e1461026a578063336875a11461029357806336568abe146102be57806342a4cf7d146102e75761011f565b806301ffc9a71461012457806304f457fa146101615780630f9004b81461018a578063248a9ca3146101c757806328699f1714610204575b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190613398565b61050e565b60405161015891906133e0565b60405180910390f35b34801561016d57600080fd5b506101886004803603810190610183919061394d565b610588565b005b34801561019657600080fd5b506101b160048036038101906101ac9190613b3e565b6105a2565b6040516101be91906140e4565b60405180910390f35b3480156101d357600080fd5b506101ee60048036038101906101e99190614106565b6105bc565b6040516101fb9190614142565b60405180910390f35b34801561021057600080fd5b5061022b6004803603810190610226919061415d565b6105db565b604051610238919061420b565b60405180910390f35b34801561024d57600080fd5b506102686004803603810190610263919061428b565b6105f5565b005b34801561027657600080fd5b50610291600480360381019061028c9190614106565b610617565b005b34801561029f57600080fd5b506102a8610672565b6040516102b59190614142565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e0919061428b565b61067c565b005b3480156102f357600080fd5b5061030e60048036038101906103099190614353565b6106f7565b60405161031b91906143d9565b60405180910390f35b34801561033057600080fd5b5061034b6004803603810190610346919061428b565b610841565b60405161035891906133e0565b60405180910390f35b34801561036d57600080fd5b506103766108cd565b6040516103839190614142565b60405180910390f35b6103a660048036038101906103a1919061473d565b6108d4565b6040516103b391906140e4565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190614106565b610a71565b005b3480156103f157600080fd5b506103fa610ba4565b60405161040791906147e5565b60405180910390f35b34801561041c57600080fd5b506104376004803603810190610432919061415d565b610bce565b604051610444919061420b565b60405180910390f35b34801561045957600080fd5b50610474600480360381019061046f919061428b565b610cd8565b005b610490600480360381019061048b9190614888565b610cfa565b60405161049d91906140e4565b60405180910390f35b3480156104b257600080fd5b506104bb610dee565b6040516104c891906148f2565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f3919061490d565b610e86565b6040516105059190614985565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610581575061058082610ea0565b5b9050919050565b6000801b61059581610f0a565b61059e82610f1e565b5050565b6105aa61301f565b6105b5826001610f2e565b9050919050565b6000806000838152602001908152602001600020600101549050919050565b6105e3613045565b6105ee826000610fba565b9050919050565b6105fe826105bc565b61060781610f0a565b6106118383611100565b50505050565b6000801b61062481610f0a565b60006001549050826001819055507f80f9b6a37a676933a62100891a89f9c5ebd8d425dbc6d36160234076dd227abf816001546040516106659291906149a0565b60405180910390a1505050565b6000600154905090565b6106846111f1565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106e8576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106f282826111f9565b505050565b6106ff613080565b600082600001516000015190506107178160086112eb565b5060006107278460200151611564565b9050610768826040518060a00160405280610741866115b7565b6000015181526020016000815260200160008152602001600081526020018481525061178f565b6000610773836115b7565b90506000610797846040518060400160405280600081526020016000815250611931565b6000015190506040518060400160405280604051806080016040528060c861ffff1681526020016107c788611a82565b81526020018581526020016107dc8686611dd6565b81525081526020018481525094503373ffffffffffffffffffffffffffffffffffffffff167f55c67887bc565be1497d05f1493b6b0b1a9f5240476ebf2ada689d5c296493fa8660405161083091906143d9565b60405180910390a250505050919050565b60006108506000801b83611e09565b1561085e57600190506108c7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b83036108ba576108b27f22435ed027edf5f902dc0093fbc24cdb50c05b5fd5f311b78c67c1cbaff60e1383611e09565b1590506108c7565b6108c48383611e09565b90505b92915050565b6000801b81565b6108dc61301f565b600082600001516000015190506108f48160036112eb565b5060008360400151905060006101f49050600061091084611e73565b9050600061091d856115b7565b60800151905081156109335761093285611e8b565b5b600087604001515111156109655761094b8585611f1f565b50816109585760c961095b565b60c85b60ff16925061096a565b60cc92505b6109a1856040518060a001604052808a6020015181526020016000815260200160008152602001600081526020018481525061178f565b60006109ac866115b7565b905060006109b986611fd0565b905060405180608001604052808661ffff1681526020016109d989611a82565b81526020018381526020016109ee8484611dd6565b81525088600001819052506040518060400160405280828152602001875181525088602001819052503373ffffffffffffffffffffffffffffffffffffffff167f46def6174d80782227f3ccfbaca1edbec0d3b3185a673ec4e577ee84d6cc514689604051610a5d91906140e4565b60405180910390a250505050505050919050565b600154610a7d81610f0a565b81600154811480610a9057506000801b81145b15610ad257806040517f125a2bb7000000000000000000000000000000000000000000000000000000008152600401610ac99190614142565b60405180910390fd5b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b811480610b2357507f22435ed027edf5f902dc0093fbc24cdb50c05b5fd5f311b78c67c1cbaff60e1381145b15610b6557806040517f125a2bb7000000000000000000000000000000000000000000000000000000008152600401610b5c9190614142565b60405180910390fd5b610b7184600154612100565b837f17a96dcfa97ca23bb8a7066cd78d58de2dc54b954a551ba0113958bfe2e13c2a60405160405180910390a250505050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610bd6613045565b600082600001519050610bea8160056112eb565b50610bf481611e8b565b6000610bff826115b7565b9050604051806080016040528060cc61ffff168152602001610c2084611a82565b8152602001828152602001610c7e83600067ffffffffffffffff811115610c4a57610c49613411565b5b604051908082528060200260200182016040528015610c785781602001602082028036833780820191505090505b50611dd6565b81525092503373ffffffffffffffffffffffffffffffffffffffff167f2bf365ff6e8001ea62dc0ac216f36ce036f1289e9bb002d9122024e5b23319c784604051610cc9919061420b565b60405180910390a25050919050565b610ce1826105bc565b610cea81610f0a565b610cf483836111f9565b50505050565b610d0261301f565b60008260000151600001519050610d1a8160046112eb565b506000836020015190506000610d308383611f1f565b9050610d4185600001516004610fba565b8460000181905250610d5c8151610d578561215b565b612186565b84600001516000019061ffff16908161ffff16815250506040518060400160405280828152602001610d8d8561215b565b81525084602001819052503373ffffffffffffffffffffffffffffffffffffffff167f520fec3c44f5956316e49db6b3cf126095e5356d2f5f12b0bb4dea8a13392bbc85604051610dde91906140e4565b60405180910390a2505050919050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ef4e06ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e819190614a07565b905090565b610e8e6130a3565b610e998260066112eb565b9050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610f1b81610f166111f1565b6121b3565b50565b610f2b6000801b82612204565b50565b610f3661301f565b600083600001516000015190506000610f53856000015185610fba565b90506000610f65838760200151611931565b90508084602001819052506101f4826000015161ffff1603610fa857610f948160000151518260200151612186565b826000019061ffff16908161ffff16815250505b81846000018190525050505092915050565b610fc2613045565b600083600001519050610fd581846112eb565b506000610fe1826115b7565b90506000610fee83611a82565b9050600061101f83611016866040518060400160405280600081526020016000815250611931565b60000151611dd6565b905060006101f49050876040015182148061105257508760200151846060015111158015611051575060008460600151115b5b156110615761013090506110ce565b600083604001516000015161ffff16146110855782604001516000015190506110cd565b6000600881111561109957611098613ba5565b5b8760088111156110ac576110ab613ba5565b5b036110cc5760006110bc8661215b565b90506110c88182612186565b9150505b5b5b60405180608001604052808261ffff168152602001848152602001858152602001838152509550505050505092915050565b600061110c8383610841565b6111e657600160008085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506111836111f1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506111eb565b600090505b92915050565b600033905090565b60006112058383610841565b156112e057600080600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061127d6111f1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4600190506112e5565b600090505b92915050565b6112f36130a3565b82826112ff8282612477565b6113625761130c82611a82565b602001516000015161131d83611a82565b60000151600001516040517f1695ed8d000000000000000000000000000000000000000000000000000000008152600401611359929190614aa0565b60405180910390fd5b61136b826124d1565b156113c05761137982611a82565b602001516000015160016040517f1695ed8d0000000000000000000000000000000000000000000000000000000081526004016113b7929190614b28565b60405180910390fd5b600360088111156113d4576113d3613ba5565b5b8160088111156113e7576113e6613ba5565b5b1480611416575060088081111561140157611400613ba5565b5b81600881111561141457611413613ba5565b5b145b806114455750600660088111156114305761142f613ba5565b5b81600881111561144357611442613ba5565b5b145b158015611458575061145682611e73565b155b156114aa5761146682611a82565b60000151600001516040517f658435f30000000000000000000000000000000000000000000000000000000081526004016114a19190614bb0565b60405180910390fd5b6114b5828233612503565b6114ff576114c38282612526565b6040517f84e9e2790000000000000000000000000000000000000000000000000000000081526004016114f69190614c2a565b60405180910390fd5b6006600881111561151357611512613ba5565b5b84600881111561152657611525613ba5565b5b0361155c57604051806040016040528060cc61ffff16815260200161154a87611a82565b602001516000015161ffff1681525092505b505092915050565b600061156f82612588565b905061157b8183612204565b7f516a84c6e4979ef4f74784ed61e83aa5cbe2779d10935d7d9564b2a098d4a5df816040516115aa9190614142565b60405180910390a1919050565b6115bf6130c5565b6011826040516115cf9190614c94565b90815260200160405180910390206040518060a0016040529081600082016040518060800160405290816000820160009054906101000a900460f01b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020016000820160029054906101000a900460f01b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020016000820160049054906101000a900460f01b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020016000820160069054906101000a900460f01b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152505081526020016001820154815260200160028201548152602001600382015481526020016004820154815250509050919050565b611798826125b8565b6011826040516117a89190614c94565b9081526020016040518091039020600101548160200181815250506011826040516117d39190614c94565b9081526020016040518091039020600201548160400181815250506011826040516117fe9190614c94565b9081526020016040518091039020600301548160600181815250508060118360405161182a9190614c94565b908152602001604051809103902060008201518160000160008201518160000160006101000a81548161ffff021916908360f01c021790555060208201518160000160026101000a81548161ffff021916908360f01c021790555060408201518160000160046101000a81548161ffff021916908360f01c021790555060608201518160000160066101000a81548161ffff021916908360f01c02179055505050602082015181600101556040820151816002015560608201518160030155608082015181600401559050507f1c306e70c05992619e2128ad1ef88df75f36c9476282e59f51401b2abaa42e4e826040516119259190614ce4565b60405180910390a15050565b6119396130fd565b60006119448461215b565b9050600061195284836126aa565b9050600060018260000151836020015161196c9190614d35565b6119769190614d78565b90506000620186a0821161198a578161198f565b620186a05b905060008167ffffffffffffffff8111156119ad576119ac613411565b5b6040519080825280602002602001820160405280156119db5781602001602082028036833780820191505090505b50905060005b82811015611a5f576012896040516119f99190614c94565b9081526020016040518091039020818660000151611a179190614dbc565b81548110611a2857611a27614df0565b5b9060005260206000200154828281518110611a4657611a45614df0565b5b60200260200101818152505080806001019150506119e1565b506040518060400160405280828152602001868152509550505050505092915050565b611a8a613117565b60106000611a97846115b7565b608001518152602001908152602001600020604051806060016040529081600082016040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff166006811115611b0457611b03613ba5565b5b6006811115611b1657611b15613ba5565b5b8152602001600182018054611b2a90614e4e565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5690614e4e565b8015611ba35780601f10611b7857610100808354040283529160200191611ba3565b820191906000526020600020905b815481529060010190602001808311611b8657829003601f168201915b5050505050815250508152602001600282016040518060800160405290816000820160009054906101000a900461ffff1661ffff1661ffff16815260200160018201805480602002602001604051908101604052809291908181526020018280548015611c2f57602002820191906000526020600020905b815481526020019060010190808311611c1b575b505050505081526020016002820160009054906101000a900460ff166005811115611c5d57611c5c613ba5565b5b6005811115611c6f57611c6e613ba5565b5b8152602001600382018054611c8390614e4e565b80601f0160208091040260200160405190810160405280929190818152602001828054611caf90614e4e565b8015611cfc5780601f10611cd157610100808354040283529160200191611cfc565b820191906000526020600020905b815481529060010190602001808311611cdf57829003601f168201915b5050505050815250508152602001600682016040518060400160405290816000820160009054906101000a900461ffff1661ffff1661ffff168152602001600182018054611d4990614e4e565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7590614e4e565b8015611dc25780601f10611d9757610100808354040283529160200191611dc2565b820191906000526020600020905b815481529060010190602001808311611da557829003601f168201915b505050505081525050815250509050919050565b60008282604051602001611deb929190614f57565b60405160208183030381529060405280519060200120905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080611e7f836115b7565b60600151119050919050565b601281604051611e9b9190614c94565b90815260200160405180910390206000611eb5919061314a565b6000601182604051611ec79190614c94565b908152602001604051809103902060010181905550611ee581612837565b7f055b00e14f3647ce9af043f85e942a4b8169374d43992a7044ad50a8a7e1845a81604051611f149190614ce4565b60405180910390a150565b6060815167ffffffffffffffff811115611f3c57611f3b613411565b5b604051908082528060200260200182016040528015611f6a5781602001602082028036833780820191505090505b50905060005b8251811015611fc957611f9d84848381518110611f9057611f8f614df0565b5b6020026020010151612a4e565b828281518110611fb057611faf614df0565b5b6020026020010181815250508080600101915050611f70565b5092915050565b60606000825190508067ffffffffffffffff811115611ff257611ff1613411565b5b6040519080825280602002602001820160405280156120205781602001602082028036833780820191505090505b50915060005b818110156120f957612036610dee565b73ffffffffffffffffffffffffffffffffffffffff1663e8a4c04e85838151811061206457612063614df0565b5b6020026020010151600001516040518263ffffffff1660e01b815260040161208c9190614fde565b602060405180830381865afa1580156120a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120cd9190615015565b8382815181106120e0576120df614df0565b5b6020026020010181815250508080600101915050612026565b5050919050565b600061210b836105bc565b905081600080858152602001908152602001600020600101819055508181847fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a4505050565b600060128260405161216d9190614c94565b9081526020016040518091039020805490509050919050565b60008082036121985760cc90506121ad565b8282036121a85760c890506121ad565b60ce90505b92915050565b6121bd8282610841565b6122005780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016121f7929190615051565b60405180910390fd5b5050565b6000816040015160000151905060008161ffff161415801561223b575061012c8161ffff16108061223a57506101368161ffff16115b5b1561227d57816040517f3afff42b00000000000000000000000000000000000000000000000000000000815260040161227491906150d8565b60405180910390fd5b6000826020015160200151519050612293612c68565b61ffff168160ff16146122dd57826040517f3afff42b0000000000000000000000000000000000000000000000000000000081526004016122d491906150d8565b60405180910390fd5b826010600086815260200190815260200160002060008201518160000160008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff0219169083600681111561234557612344613ba5565b5b0217905550604082015181600101908161235f919061529c565b50505060208201518160020160008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160010190805190602001906123aa92919061316b565b5060408201518160020160006101000a81548160ff021916908360058111156123d6576123d5613ba5565b5b021790555060608201518160030190816123f0919061529c565b50505060408201518160060160008201518160000160006101000a81548161ffff021916908361ffff1602179055506020820151816001019081612434919061529c565b5050509050507fc4c76143cbd497adc2b5bc159d932dcfa8483928a0d22661d1404ef1c68984a1846040516124699190614142565b60405180910390a150505050565b60006124866000801b33610841565b1561249457600190506124cb565b60008260088111156124a9576124a8613ba5565b5b60ff166001901b6124b985611a82565b60200151600001511661ffff16141590505b92915050565b60006124dc82611a82565b600001516000015180156124fc575060006124f6836115b7565b60400151115b9050919050565b6000806125108585612526565b905061251c8184610841565b9150509392505050565b60008061253284611a82565b602001516020015190506000815103612551576000801b915050612582565b8083600881111561256557612564613ba5565b5b8151811061257657612575614df0565b5b60200260200101519150505b92915050565b60008160405160200161259b91906150d8565b604051602081830303815290604052805190602001209050919050565b426011826040516125c99190614c94565b90815260200160405180910390206003018190555060006012826040516125f09190614c94565b9081526020016040518091039020805490501115612644576011816040516126189190614c94565b9081526020016040518091039020600201600081548092919061263a9061536e565b91905055506126a7565b60006011826040516126569190614c94565b90815260200160405180910390206002015411156126a65760118160405161267e9190614c94565b908152602001604051809103902060020160008154809291906126a09061536e565b91905055505b5b50565b6126b26131b8565b60008290507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84600001511480156126ee575060008460200151145b15612712576000846000018181525050600084602001818152505083915050612831565b6000846020015114801561272a575060008460000151145b1561274e5760018161273c9190614d35565b84602001818152505083915050612831565b60008460000151121561278157836000015160018261276d9190614d35565b6127779190614d78565b8460000181815250505b6000846020015112156127b45783602001516001826127a09190614d35565b6127aa9190614d78565b8460200181815250505b600184602001516127c59190614d78565b846000015113806127da575060008460000151125b806127e85750808460200151135b1561282c5783816040517f6de8558200000000000000000000000000000000000000000000000000000000815260040161282392919061544f565b60405180910390fd5b839150505b92915050565b6129ed81600a6040518060a0016040529081600082016040518060800160405290816000820160009054906101000a900460f01b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020016000820160029054906101000a900460f01b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020016000820160049054906101000a900460f01b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020016000820160069054906101000a900460f01b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681525050815260200160018201548152602001600282015481526020016003820154815260200160048201548152505061178f565b60006011826040516129ff9190614c94565b9081526020016040518091039020600301819055507f510fb78f495511d68f630cfabc06d8a58d5aeb7bc63f3538b9cd46923aa23e5d81604051612a439190614ce4565b60405180910390a150565b6000612a58610dee565b73ffffffffffffffffffffffffffffffffffffffff1663e8a4c04e83600001516040518263ffffffff1660e01b8152600401612a949190614fde565b602060405180830381865afa158015612ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad59190615015565b9050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f6e20077600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fd45d702846040518263ffffffff1660e01b8152600401612b709190614142565b602060405180830381865afa158015612b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb191906154a0565b846000015185604001516040518463ffffffff1660e01b8152600401612bd89291906154cd565b60206040518083038185885af1158015612bf6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c1b9190615015565b507f688cfefb012ebddc451bd5077139509d5fbfdfc92c33cba16d7e76f16c2f5da883604051612c4b9190614ce4565b60405180910390a1612c6283828460200151612c8e565b92915050565b60006001600880811115612c7f57612c7e613ba5565b5b612c8991906154fd565b905090565b6000612c998461215b565b905080821115612cf75760405180604001604052806000815260200182815250826040517f6de85582000000000000000000000000000000000000000000000000000000008152600401612cee92919061544f565b60405180910390fd5b808203612e0057601284604051612d0e9190614c94565b9081526020016040518091039020839080600181540180825580915050600190039060005260206000200160009091909190915055612d4b610dee565b73ffffffffffffffffffffffffffffffffffffffff16632be681f5846040518263ffffffff1660e01b8152600401612d839190614142565b602060405180830381865afa158015612da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc491906154a0565b601185604051612dd49190614c94565b90815260200160405180910390206001016000828254612df49190614dbc565b92505081905550612fd7565b612e08610dee565b73ffffffffffffffffffffffffffffffffffffffff16632be681f5601286604051612e339190614c94565b90815260200160405180910390208481548110612e5357612e52614df0565b5b90600052602060002001546040518263ffffffff1660e01b8152600401612e7a9190614142565b602060405180830381865afa158015612e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebb91906154a0565b612ec3610dee565b73ffffffffffffffffffffffffffffffffffffffff16632be681f5856040518263ffffffff1660e01b8152600401612efb9190614142565b602060405180830381865afa158015612f18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f3c91906154a0565b601186604051612f4c9190614c94565b908152602001604051809103902060010154612f689190614dbc565b612f729190615533565b601185604051612f829190614c94565b90815260200160405180910390206001018190555082601285604051612fa89190614c94565b90815260200160405180910390208381548110612fc857612fc7614df0565b5b90600052602060002001819055505b612fe0846125b8565b7fd9104dbb62c9778e68f07361617c0e7c290633d8fc9d4335dd0710803633b93b8483604051613011929190615576565b60405180910390a150505050565b6040518060400160405280613032613045565b815260200161303f6130fd565b81525090565b6040518060800160405280600061ffff168152602001613063613117565b81526020016130706130c5565b8152602001600080191681525090565b6040518060400160405280613093613045565b8152602001600080191681525090565b6040518060400160405280600061ffff168152602001600061ffff1681525090565b6040518060a001604052806130d86131d2565b8152602001600081526020016000815260200160008152602001600080191681525090565b604051806040016040528060608152602001600081525090565b604051806060016040528061312a61327e565b81526020016131376132b3565b81526020016131446132f1565b81525090565b5080546000825590600052602060002090810190613168919061330f565b50565b8280548282559060005260206000209081019282156131a7579160200282015b828111156131a657825182559160200191906001019061318b565b5b5090506131b4919061330f565b5090565b604051806040016040528060008152602001600081525090565b604051806080016040528060007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200160007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200160007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200160007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681525090565b6040518060600160405280600015158152602001600060068111156132a6576132a5613ba5565b5b8152602001606081525090565b6040518060800160405280600061ffff16815260200160608152602001600060058111156132e4576132e3613ba5565b5b8152602001606081525090565b6040518060400160405280600061ffff168152602001606081525090565b5b80821115613328576000816000905550600101613310565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61337581613340565b811461338057600080fd5b50565b6000813590506133928161336c565b92915050565b6000602082840312156133ae576133ad613336565b5b60006133bc84828501613383565b91505092915050565b60008115159050919050565b6133da816133c5565b82525050565b60006020820190506133f560008301846133d1565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61344982613400565b810181811067ffffffffffffffff8211171561346857613467613411565b5b80604052505050565b600061347b61332c565b90506134878282613440565b919050565b600080fd5b61349a816133c5565b81146134a557600080fd5b50565b6000813590506134b781613491565b92915050565b600781106134ca57600080fd5b50565b6000813590506134dc816134bd565b92915050565b600080fd5b600080fd5b600067ffffffffffffffff82111561350757613506613411565b5b61351082613400565b9050602081019050919050565b82818337600083830152505050565b600061353f61353a846134ec565b613471565b90508281526020810184848401111561355b5761355a6134e7565b5b61356684828561351d565b509392505050565b600082601f830112613583576135826134e2565b5b813561359384826020860161352c565b91505092915050565b6000606082840312156135b2576135b16133fb565b5b6135bc6060613471565b905060006135cc848285016134a8565b60008301525060206135e0848285016134cd565b602083015250604082013567ffffffffffffffff8111156136045761360361348c565b5b6136108482850161356e565b60408301525092915050565b600061ffff82169050919050565b6136338161361c565b811461363e57600080fd5b50565b6000813590506136508161362a565b92915050565b600067ffffffffffffffff82111561367157613670613411565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b61369a81613687565b81146136a557600080fd5b50565b6000813590506136b781613691565b92915050565b60006136d06136cb84613656565b613471565b905080838252602082019050602084028301858111156136f3576136f2613682565b5b835b8181101561371c578061370888826136a8565b8452602084019350506020810190506136f5565b5050509392505050565b600082601f83011261373b5761373a6134e2565b5b813561374b8482602086016136bd565b91505092915050565b6006811061376157600080fd5b50565b60008135905061377381613754565b92915050565b60006080828403121561378f5761378e6133fb565b5b6137996080613471565b905060006137a984828501613641565b600083015250602082013567ffffffffffffffff8111156137cd576137cc61348c565b5b6137d984828501613726565b60208301525060406137ed84828501613764565b604083015250606082013567ffffffffffffffff8111156138115761381061348c565b5b61381d8482850161356e565b60608301525092915050565b60006040828403121561383f5761383e6133fb565b5b6138496040613471565b9050600061385984828501613641565b600083015250602082013567ffffffffffffffff81111561387d5761387c61348c565b5b6138898482850161356e565b60208301525092915050565b6000606082840312156138ab576138aa6133fb565b5b6138b56060613471565b9050600082013567ffffffffffffffff8111156138d5576138d461348c565b5b6138e18482850161359c565b600083015250602082013567ffffffffffffffff8111156139055761390461348c565b5b61391184828501613779565b602083015250604082013567ffffffffffffffff8111156139355761393461348c565b5b61394184828501613829565b60408301525092915050565b60006020828403121561396357613962613336565b5b600082013567ffffffffffffffff8111156139815761398061333b565b5b61398d84828501613895565b91505092915050565b6000819050919050565b6139a981613996565b81146139b457600080fd5b50565b6000813590506139c6816139a0565b92915050565b6000606082840312156139e2576139e16133fb565b5b6139ec6060613471565b9050600082013567ffffffffffffffff811115613a0c57613a0b61348c565b5b613a188482850161356e565b6000830152506020613a2c848285016139b7565b6020830152506040613a40848285016136a8565b60408301525092915050565b6000819050919050565b613a5f81613a4c565b8114613a6a57600080fd5b50565b600081359050613a7c81613a56565b92915050565b600060408284031215613a9857613a976133fb565b5b613aa26040613471565b90506000613ab284828501613a6d565b6000830152506020613ac684828501613a6d565b60208301525092915050565b600060608284031215613ae857613ae76133fb565b5b613af26040613471565b9050600082013567ffffffffffffffff811115613b1257613b1161348c565b5b613b1e848285016139cc565b6000830152506020613b3284828501613a82565b60208301525092915050565b600060208284031215613b5457613b53613336565b5b600082013567ffffffffffffffff811115613b7257613b7161333b565b5b613b7e84828501613ad2565b91505092915050565b613b908161361c565b82525050565b613b9f816133c5565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60078110613be557613be4613ba5565b5b50565b6000819050613bf682613bd4565b919050565b6000613c0682613be8565b9050919050565b613c1681613bfb565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c56578082015181840152602081019050613c3b565b60008484015250505050565b6000613c6d82613c1c565b613c778185613c27565b9350613c87818560208601613c38565b613c9081613400565b840191505092915050565b6000606083016000830151613cb36000860182613b96565b506020830151613cc66020860182613c0d565b5060408301518482036040860152613cde8282613c62565b9150508091505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613d2081613687565b82525050565b6000613d328383613d17565b60208301905092915050565b6000602082019050919050565b6000613d5682613ceb565b613d608185613cf6565b9350613d6b83613d07565b8060005b83811015613d9c578151613d838882613d26565b9750613d8e83613d3e565b925050600181019050613d6f565b5085935050505092915050565b60068110613dba57613db9613ba5565b5b50565b6000819050613dcb82613da9565b919050565b6000613ddb82613dbd565b9050919050565b613deb81613dd0565b82525050565b6000608083016000830151613e096000860182613b87565b5060208301518482036020860152613e218282613d4b565b9150506040830151613e366040860182613de2565b5060608301518482036060860152613e4e8282613c62565b9150508091505092915050565b6000604083016000830151613e736000860182613b87565b5060208301518482036020860152613e8b8282613c62565b9150508091505092915050565b60006060830160008301518482036000860152613eb58282613c9b565b91505060208301518482036020860152613ecf8282613df1565b91505060408301518482036040860152613ee98282613e5b565b9150508091505092915050565b60007fffff00000000000000000000000000000000000000000000000000000000000082169050919050565b613f2b81613ef6565b82525050565b608082016000820151613f476000850182613f22565b506020820151613f5a6020850182613f22565b506040820151613f6d6040850182613f22565b506060820151613f806060850182613f22565b50505050565b613f8f81613996565b82525050565b61010082016000820151613fac6000850182613f31565b506020820151613fbf6080850182613f86565b506040820151613fd260a0850182613f86565b506060820151613fe560c0850182613f86565b506080820151613ff860e0850182613d17565b50505050565b6000610160830160008301516140176000860182613b87565b506020830151848203602086015261402f8282613e98565b91505060408301516140446040860182613f95565b506060830151614058610140860182613d17565b508091505092915050565b600060408301600083015184820360008601526140808282613d4b565b91505060208301516140956020860182613f86565b508091505092915050565b600060408301600083015184820360008601526140bd8282613ffe565b915050602083015184820360208601526140d78282614063565b9150508091505092915050565b600060208201905081810360008301526140fe81846140a0565b905092915050565b60006020828403121561411c5761411b613336565b5b600061412a848285016136a8565b91505092915050565b61413c81613687565b82525050565b60006020820190506141576000830184614133565b92915050565b60006020828403121561417357614172613336565b5b600082013567ffffffffffffffff8111156141915761419061333b565b5b61419d848285016139cc565b91505092915050565b6000610160830160008301516141bf6000860182613b87565b50602083015184820360208601526141d78282613e98565b91505060408301516141ec6040860182613f95565b506060830151614200610140860182613d17565b508091505092915050565b6000602082019050818103600083015261422581846141a6565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142588261422d565b9050919050565b6142688161424d565b811461427357600080fd5b50565b6000813590506142858161425f565b92915050565b600080604083850312156142a2576142a1613336565b5b60006142b0858286016136a8565b92505060206142c185828601614276565b9150509250929050565b6000604082840312156142e1576142e06133fb565b5b6142eb6040613471565b9050600082013567ffffffffffffffff81111561430b5761430a61348c565b5b614317848285016139cc565b600083015250602082013567ffffffffffffffff81111561433b5761433a61348c565b5b61434784828501613895565b60208301525092915050565b60006020828403121561436957614368613336565b5b600082013567ffffffffffffffff8111156143875761438661333b565b5b614393848285016142cb565b91505092915050565b600060408301600083015184820360008601526143b98282613ffe565b91505060208301516143ce6020860182613d17565b508091505092915050565b600060208201905081810360008301526143f3818461439c565b905092915050565b61440481613ef6565b811461440f57600080fd5b50565b600081359050614421816143fb565b92915050565b60006080828403121561443d5761443c6133fb565b5b6144476080613471565b9050600061445784828501614412565b600083015250602061446b84828501614412565b602083015250604061447f84828501614412565b604083015250606061449384828501614412565b60608301525092915050565b600067ffffffffffffffff8211156144ba576144b9613411565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156144e6576144e5613411565b5b6144ef82613400565b9050602081019050919050565b600061450f61450a846144cb565b613471565b90508281526020810184848401111561452b5761452a6134e7565b5b61453684828561351d565b509392505050565b600082601f830112614553576145526134e2565b5b81356145638482602086016144fc565b91505092915050565b600060608284031215614582576145816133fb565b5b61458c6060613471565b9050600082013567ffffffffffffffff8111156145ac576145ab61348c565b5b6145b88482850161453e565b60008301525060206145cc848285016139b7565b60208301525060406145e084828501614276565b60408301525092915050565b60006145ff6145fa8461449f565b613471565b9050808382526020820190506020840283018581111561462257614621613682565b5b835b8181101561466957803567ffffffffffffffff811115614647576146466134e2565b5b808601614654898261456c565b85526020850194505050602081019050614624565b5050509392505050565b600082601f830112614688576146876134e2565b5b81356146988482602086016145ec565b91505092915050565b600060c082840312156146b7576146b66133fb565b5b6146c16060613471565b9050600082013567ffffffffffffffff8111156146e1576146e061348c565b5b6146ed848285016139cc565b600083015250602061470184828501614427565b60208301525060a082013567ffffffffffffffff8111156147255761472461348c565b5b61473184828501614673565b60408301525092915050565b60006020828403121561475357614752613336565b5b600082013567ffffffffffffffff8111156147715761477061333b565b5b61477d848285016146a1565b91505092915050565b6000819050919050565b60006147ab6147a66147a18461422d565b614786565b61422d565b9050919050565b60006147bd82614790565b9050919050565b60006147cf826147b2565b9050919050565b6147df816147c4565b82525050565b60006020820190506147fa60008301846147d6565b92915050565b600060408284031215614816576148156133fb565b5b6148206040613471565b9050600082013567ffffffffffffffff8111156148405761483f61348c565b5b61484c848285016139cc565b600083015250602082013567ffffffffffffffff8111156148705761486f61348c565b5b61487c84828501614673565b60208301525092915050565b60006020828403121561489e5761489d613336565b5b600082013567ffffffffffffffff8111156148bc576148bb61333b565b5b6148c884828501614800565b91505092915050565b60006148dc826147b2565b9050919050565b6148ec816148d1565b82525050565b600060208201905061490760008301846148e3565b92915050565b60006020828403121561492357614922613336565b5b600082013567ffffffffffffffff8111156149415761494061333b565b5b61494d8482850161356e565b91505092915050565b60408201600082015161496c6000850182613b87565b50602082015161497f6020850182613b87565b50505050565b600060408201905061499a6000830184614956565b92915050565b60006040820190506149b56000830185614133565b6149c26020830184614133565b9392505050565b60006149d48261424d565b9050919050565b6149e4816149c9565b81146149ef57600080fd5b50565b600081519050614a01816149db565b92915050565b600060208284031215614a1d57614a1c613336565b5b6000614a2b848285016149f2565b91505092915050565b600082825260208201905092915050565b7f4d6574686f64204e6f7420416c6c6f7765640000000000000000000000000000600082015250565b6000614a7b601283614a34565b9150614a8682614a45565b602082019050919050565b614a9a8161361c565b82525050565b60006060820190508181036000830152614ab981614a6e565b9050614ac86020830185614a91565b614ad560408301846133d1565b9392505050565b7f5265736f7572636520496d6d757461626c650000000000000000000000000000600082015250565b6000614b12601283614a34565b9150614b1d82614adc565b602082019050919050565b60006060820190508181036000830152614b4181614b05565b9050614b506020830185614a91565b614b5d60408301846133d1565b9392505050565b7f4e6f7420466f756e640000000000000000000000000000000000000000000000600082015250565b6000614b9a600983614a34565b9150614ba582614b64565b602082019050919050565b60006040820190508181036000830152614bc981614b8d565b9050614bd860208301846133d1565b92915050565b7f466f7262696464656e0000000000000000000000000000000000000000000000600082015250565b6000614c14600983614a34565b9150614c1f82614bde565b602082019050919050565b60006040820190508181036000830152614c4381614c07565b9050614c526020830184614133565b92915050565b600081905092915050565b6000614c6e82613c1c565b614c788185614c58565b9350614c88818560208601613c38565b80840191505092915050565b6000614ca08284614c63565b915081905092915050565b6000614cb682613c1c565b614cc08185614a34565b9350614cd0818560208601613c38565b614cd981613400565b840191505092915050565b60006020820190508181036000830152614cfe8184614cab565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d4082613a4c565b9150614d4b83613a4c565b9250828203905081811260008412168282136000851215161715614d7257614d71614d06565b5b92915050565b6000614d8382613a4c565b9150614d8e83613a4c565b925082820190508281121560008312168382126000841215161715614db657614db5614d06565b5b92915050565b6000614dc782613996565b9150614dd283613996565b9250828201905080821115614dea57614de9614d06565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e6657607f821691505b602082108103614e7957614e78614e1f565b5b50919050565b61010082016000820151614e966000850182613f31565b506020820151614ea96080850182613f86565b506040820151614ebc60a0850182613f86565b506060820151614ecf60c0850182613f86565b506080820151614ee260e0850182613d17565b50505050565b600082825260208201905092915050565b6000614f0482613ceb565b614f0e8185614ee8565b9350614f1983613d07565b8060005b83811015614f4a578151614f318882613d26565b9750614f3c83613d3e565b925050600181019050614f1d565b5085935050505092915050565b600061012082019050614f6d6000830185614e7f565b818103610100830152614f808184614ef9565b90509392505050565b600081519050919050565b600082825260208201905092915050565b6000614fb082614f89565b614fba8185614f94565b9350614fca818560208601613c38565b614fd381613400565b840191505092915050565b60006020820190508181036000830152614ff88184614fa5565b905092915050565b60008151905061500f81613691565b92915050565b60006020828403121561502b5761502a613336565b5b600061503984828501615000565b91505092915050565b61504b8161424d565b82525050565b60006040820190506150666000830185615042565b6150736020830184614133565b9392505050565b600060608301600083015184820360008601526150978282613c9b565b915050602083015184820360208601526150b18282613df1565b915050604083015184820360408601526150cb8282613e5b565b9150508091505092915050565b600060208201905081810360008301526150f2818461507a565b905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261515c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261511f565b615166868361511f565b95508019841693508086168417925050509392505050565b600061519961519461518f84613996565b614786565b613996565b9050919050565b6000819050919050565b6151b38361517e565b6151c76151bf826151a0565b84845461512c565b825550505050565b600090565b6151dc6151cf565b6151e78184846151aa565b505050565b5b8181101561520b576152006000826151d4565b6001810190506151ed565b5050565b601f82111561525057615221816150fa565b61522a8461510f565b81016020851015615239578190505b61524d6152458561510f565b8301826151ec565b50505b505050565b600082821c905092915050565b600061527360001984600802615255565b1980831691505092915050565b600061528c8383615262565b9150826002028217905092915050565b6152a582613c1c565b67ffffffffffffffff8111156152be576152bd613411565b5b6152c88254614e4e565b6152d382828561520f565b600060209050601f83116001811461530657600084156152f4578287015190505b6152fe8582615280565b865550615366565b601f198416615314866150fa565b60005b8281101561533c57848901518255600182019150602085019450602081019050615317565b868310156153595784890151615355601f891682615262565b8355505b6001600288020188555050505b505050505050565b600061537982613996565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036153ab576153aa614d06565b5b600182019050919050565b7f4f7574206f6620426f756e647300000000000000000000000000000000000000600082015250565b60006153ec600d83614a34565b91506153f7826153b6565b602082019050919050565b61540b81613a4c565b82525050565b6040820160008201516154276000850182615402565b50602082015161543a6020850182615402565b50505050565b61544981613a4c565b82525050565b60006080820190508181036000830152615468816153df565b90506154776020830185615411565b6154846060830184615440565b9392505050565b60008151905061549a816139a0565b92915050565b6000602082840312156154b6576154b5613336565b5b60006154c48482850161548b565b91505092915050565b600060408201905081810360008301526154e78185614fa5565b90506154f66020830184615042565b9392505050565b60006155088261361c565b91506155138361361c565b9250828201905061ffff81111561552d5761552c614d06565b5b92915050565b600061553e82613996565b915061554983613996565b925082820390508181111561556157615560614d06565b5b92915050565b61557081613996565b82525050565b600060408201905081810360008301526155908185614cab565b905061559f6020830184615567565b939250505056fea26469706673582212208d0f2aff1c7c6bb6bb8c4fa1e7c0c2ac06d17b31ea19035c75273072c27845b364736f6c634300081c0033",
  "deployedBytecode": "0x60806040526004361061011f5760003560e01c806391d14854116100a0578063ca63628c11610064578063ca63628c14610410578063d547741f1461044d578063dd0fec4c14610476578063ef4e06ec146104a6578063fd05b634146104d15761011f565b806391d1485414610324578063a217fddf14610361578063b0184e011461038c578063b2455654146103bc578063c2640ed1146103e55761011f565b80632f2ff15d116100e75780632f2ff15d1461024157806332729d5e1461026a578063336875a11461029357806336568abe146102be57806342a4cf7d146102e75761011f565b806301ffc9a71461012457806304f457fa146101615780630f9004b81461018a578063248a9ca3146101c757806328699f1714610204575b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190613398565b61050e565b60405161015891906133e0565b60405180910390f35b34801561016d57600080fd5b506101886004803603810190610183919061394d565b610588565b005b34801561019657600080fd5b506101b160048036038101906101ac9190613b3e565b6105a2565b6040516101be91906140e4565b60405180910390f35b3480156101d357600080fd5b506101ee60048036038101906101e99190614106565b6105bc565b6040516101fb9190614142565b60405180910390f35b34801561021057600080fd5b5061022b6004803603810190610226919061415d565b6105db565b604051610238919061420b565b60405180910390f35b34801561024d57600080fd5b506102686004803603810190610263919061428b565b6105f5565b005b34801561027657600080fd5b50610291600480360381019061028c9190614106565b610617565b005b34801561029f57600080fd5b506102a8610672565b6040516102b59190614142565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e0919061428b565b61067c565b005b3480156102f357600080fd5b5061030e60048036038101906103099190614353565b6106f7565b60405161031b91906143d9565b60405180910390f35b34801561033057600080fd5b5061034b6004803603810190610346919061428b565b610841565b60405161035891906133e0565b60405180910390f35b34801561036d57600080fd5b506103766108cd565b6040516103839190614142565b60405180910390f35b6103a660048036038101906103a1919061473d565b6108d4565b6040516103b391906140e4565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190614106565b610a71565b005b3480156103f157600080fd5b506103fa610ba4565b60405161040791906147e5565b60405180910390f35b34801561041c57600080fd5b506104376004803603810190610432919061415d565b610bce565b604051610444919061420b565b60405180910390f35b34801561045957600080fd5b50610474600480360381019061046f919061428b565b610cd8565b005b610490600480360381019061048b9190614888565b610cfa565b60405161049d91906140e4565b60405180910390f35b3480156104b257600080fd5b506104bb610dee565b6040516104c891906148f2565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f3919061490d565b610e86565b6040516105059190614985565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610581575061058082610ea0565b5b9050919050565b6000801b61059581610f0a565b61059e82610f1e565b5050565b6105aa61301f565b6105b5826001610f2e565b9050919050565b6000806000838152602001908152602001600020600101549050919050565b6105e3613045565b6105ee826000610fba565b9050919050565b6105fe826105bc565b61060781610f0a565b6106118383611100565b50505050565b6000801b61062481610f0a565b60006001549050826001819055507f80f9b6a37a676933a62100891a89f9c5ebd8d425dbc6d36160234076dd227abf816001546040516106659291906149a0565b60405180910390a1505050565b6000600154905090565b6106846111f1565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106e8576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106f282826111f9565b505050565b6106ff613080565b600082600001516000015190506107178160086112eb565b5060006107278460200151611564565b9050610768826040518060a00160405280610741866115b7565b6000015181526020016000815260200160008152602001600081526020018481525061178f565b6000610773836115b7565b90506000610797846040518060400160405280600081526020016000815250611931565b6000015190506040518060400160405280604051806080016040528060c861ffff1681526020016107c788611a82565b81526020018581526020016107dc8686611dd6565b81525081526020018481525094503373ffffffffffffffffffffffffffffffffffffffff167f55c67887bc565be1497d05f1493b6b0b1a9f5240476ebf2ada689d5c296493fa8660405161083091906143d9565b60405180910390a250505050919050565b60006108506000801b83611e09565b1561085e57600190506108c7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b83036108ba576108b27f22435ed027edf5f902dc0093fbc24cdb50c05b5fd5f311b78c67c1cbaff60e1383611e09565b1590506108c7565b6108c48383611e09565b90505b92915050565b6000801b81565b6108dc61301f565b600082600001516000015190506108f48160036112eb565b5060008360400151905060006101f49050600061091084611e73565b9050600061091d856115b7565b60800151905081156109335761093285611e8b565b5b600087604001515111156109655761094b8585611f1f565b50816109585760c961095b565b60c85b60ff16925061096a565b60cc92505b6109a1856040518060a001604052808a6020015181526020016000815260200160008152602001600081526020018481525061178f565b60006109ac866115b7565b905060006109b986611fd0565b905060405180608001604052808661ffff1681526020016109d989611a82565b81526020018381526020016109ee8484611dd6565b81525088600001819052506040518060400160405280828152602001875181525088602001819052503373ffffffffffffffffffffffffffffffffffffffff167f46def6174d80782227f3ccfbaca1edbec0d3b3185a673ec4e577ee84d6cc514689604051610a5d91906140e4565b60405180910390a250505050505050919050565b600154610a7d81610f0a565b81600154811480610a9057506000801b81145b15610ad257806040517f125a2bb7000000000000000000000000000000000000000000000000000000008152600401610ac99190614142565b60405180910390fd5b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b811480610b2357507f22435ed027edf5f902dc0093fbc24cdb50c05b5fd5f311b78c67c1cbaff60e1381145b15610b6557806040517f125a2bb7000000000000000000000000000000000000000000000000000000008152600401610b5c9190614142565b60405180910390fd5b610b7184600154612100565b837f17a96dcfa97ca23bb8a7066cd78d58de2dc54b954a551ba0113958bfe2e13c2a60405160405180910390a250505050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610bd6613045565b600082600001519050610bea8160056112eb565b50610bf481611e8b565b6000610bff826115b7565b9050604051806080016040528060cc61ffff168152602001610c2084611a82565b8152602001828152602001610c7e83600067ffffffffffffffff811115610c4a57610c49613411565b5b604051908082528060200260200182016040528015610c785781602001602082028036833780820191505090505b50611dd6565b81525092503373ffffffffffffffffffffffffffffffffffffffff167f2bf365ff6e8001ea62dc0ac216f36ce036f1289e9bb002d9122024e5b23319c784604051610cc9919061420b565b60405180910390a25050919050565b610ce1826105bc565b610cea81610f0a565b610cf483836111f9565b50505050565b610d0261301f565b60008260000151600001519050610d1a8160046112eb565b506000836020015190506000610d308383611f1f565b9050610d4185600001516004610fba565b8460000181905250610d5c8151610d578561215b565b612186565b84600001516000019061ffff16908161ffff16815250506040518060400160405280828152602001610d8d8561215b565b81525084602001819052503373ffffffffffffffffffffffffffffffffffffffff167f520fec3c44f5956316e49db6b3cf126095e5356d2f5f12b0bb4dea8a13392bbc85604051610dde91906140e4565b60405180910390a2505050919050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ef4e06ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e819190614a07565b905090565b610e8e6130a3565b610e998260066112eb565b9050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610f1b81610f166111f1565b6121b3565b50565b610f2b6000801b82612204565b50565b610f3661301f565b600083600001516000015190506000610f53856000015185610fba565b90506000610f65838760200151611931565b90508084602001819052506101f4826000015161ffff1603610fa857610f948160000151518260200151612186565b826000019061ffff16908161ffff16815250505b81846000018190525050505092915050565b610fc2613045565b600083600001519050610fd581846112eb565b506000610fe1826115b7565b90506000610fee83611a82565b9050600061101f83611016866040518060400160405280600081526020016000815250611931565b60000151611dd6565b905060006101f49050876040015182148061105257508760200151846060015111158015611051575060008460600151115b5b156110615761013090506110ce565b600083604001516000015161ffff16146110855782604001516000015190506110cd565b6000600881111561109957611098613ba5565b5b8760088111156110ac576110ab613ba5565b5b036110cc5760006110bc8661215b565b90506110c88182612186565b9150505b5b5b60405180608001604052808261ffff168152602001848152602001858152602001838152509550505050505092915050565b600061110c8383610841565b6111e657600160008085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506111836111f1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506111eb565b600090505b92915050565b600033905090565b60006112058383610841565b156112e057600080600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061127d6111f1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4600190506112e5565b600090505b92915050565b6112f36130a3565b82826112ff8282612477565b6113625761130c82611a82565b602001516000015161131d83611a82565b60000151600001516040517f1695ed8d000000000000000000000000000000000000000000000000000000008152600401611359929190614aa0565b60405180910390fd5b61136b826124d1565b156113c05761137982611a82565b602001516000015160016040517f1695ed8d0000000000000000000000000000000000000000000000000000000081526004016113b7929190614b28565b60405180910390fd5b600360088111156113d4576113d3613ba5565b5b8160088111156113e7576113e6613ba5565b5b1480611416575060088081111561140157611400613ba5565b5b81600881111561141457611413613ba5565b5b145b806114455750600660088111156114305761142f613ba5565b5b81600881111561144357611442613ba5565b5b145b158015611458575061145682611e73565b155b156114aa5761146682611a82565b60000151600001516040517f658435f30000000000000000000000000000000000000000000000000000000081526004016114a19190614bb0565b60405180910390fd5b6114b5828233612503565b6114ff576114c38282612526565b6040517f84e9e2790000000000000000000000000000000000000000000000000000000081526004016114f69190614c2a565b60405180910390fd5b6006600881111561151357611512613ba5565b5b84600881111561152657611525613ba5565b5b0361155c57604051806040016040528060cc61ffff16815260200161154a87611a82565b602001516000015161ffff1681525092505b505092915050565b600061156f82612588565b905061157b8183612204565b7f516a84c6e4979ef4f74784ed61e83aa5cbe2779d10935d7d9564b2a098d4a5df816040516115aa9190614142565b60405180910390a1919050565b6115bf6130c5565b6011826040516115cf9190614c94565b90815260200160405180910390206040518060a0016040529081600082016040518060800160405290816000820160009054906101000a900460f01b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020016000820160029054906101000a900460f01b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020016000820160049054906101000a900460f01b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020016000820160069054906101000a900460f01b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152505081526020016001820154815260200160028201548152602001600382015481526020016004820154815250509050919050565b611798826125b8565b6011826040516117a89190614c94565b9081526020016040518091039020600101548160200181815250506011826040516117d39190614c94565b9081526020016040518091039020600201548160400181815250506011826040516117fe9190614c94565b9081526020016040518091039020600301548160600181815250508060118360405161182a9190614c94565b908152602001604051809103902060008201518160000160008201518160000160006101000a81548161ffff021916908360f01c021790555060208201518160000160026101000a81548161ffff021916908360f01c021790555060408201518160000160046101000a81548161ffff021916908360f01c021790555060608201518160000160066101000a81548161ffff021916908360f01c02179055505050602082015181600101556040820151816002015560608201518160030155608082015181600401559050507f1c306e70c05992619e2128ad1ef88df75f36c9476282e59f51401b2abaa42e4e826040516119259190614ce4565b60405180910390a15050565b6119396130fd565b60006119448461215b565b9050600061195284836126aa565b9050600060018260000151836020015161196c9190614d35565b6119769190614d78565b90506000620186a0821161198a578161198f565b620186a05b905060008167ffffffffffffffff8111156119ad576119ac613411565b5b6040519080825280602002602001820160405280156119db5781602001602082028036833780820191505090505b50905060005b82811015611a5f576012896040516119f99190614c94565b9081526020016040518091039020818660000151611a179190614dbc565b81548110611a2857611a27614df0565b5b9060005260206000200154828281518110611a4657611a45614df0565b5b60200260200101818152505080806001019150506119e1565b506040518060400160405280828152602001868152509550505050505092915050565b611a8a613117565b60106000611a97846115b7565b608001518152602001908152602001600020604051806060016040529081600082016040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff166006811115611b0457611b03613ba5565b5b6006811115611b1657611b15613ba5565b5b8152602001600182018054611b2a90614e4e565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5690614e4e565b8015611ba35780601f10611b7857610100808354040283529160200191611ba3565b820191906000526020600020905b815481529060010190602001808311611b8657829003601f168201915b5050505050815250508152602001600282016040518060800160405290816000820160009054906101000a900461ffff1661ffff1661ffff16815260200160018201805480602002602001604051908101604052809291908181526020018280548015611c2f57602002820191906000526020600020905b815481526020019060010190808311611c1b575b505050505081526020016002820160009054906101000a900460ff166005811115611c5d57611c5c613ba5565b5b6005811115611c6f57611c6e613ba5565b5b8152602001600382018054611c8390614e4e565b80601f0160208091040260200160405190810160405280929190818152602001828054611caf90614e4e565b8015611cfc5780601f10611cd157610100808354040283529160200191611cfc565b820191906000526020600020905b815481529060010190602001808311611cdf57829003601f168201915b5050505050815250508152602001600682016040518060400160405290816000820160009054906101000a900461ffff1661ffff1661ffff168152602001600182018054611d4990614e4e565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7590614e4e565b8015611dc25780601f10611d9757610100808354040283529160200191611dc2565b820191906000526020600020905b815481529060010190602001808311611da557829003601f168201915b505050505081525050815250509050919050565b60008282604051602001611deb929190614f57565b60405160208183030381529060405280519060200120905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080611e7f836115b7565b60600151119050919050565b601281604051611e9b9190614c94565b90815260200160405180910390206000611eb5919061314a565b6000601182604051611ec79190614c94565b908152602001604051809103902060010181905550611ee581612837565b7f055b00e14f3647ce9af043f85e942a4b8169374d43992a7044ad50a8a7e1845a81604051611f149190614ce4565b60405180910390a150565b6060815167ffffffffffffffff811115611f3c57611f3b613411565b5b604051908082528060200260200182016040528015611f6a5781602001602082028036833780820191505090505b50905060005b8251811015611fc957611f9d84848381518110611f9057611f8f614df0565b5b6020026020010151612a4e565b828281518110611fb057611faf614df0565b5b6020026020010181815250508080600101915050611f70565b5092915050565b60606000825190508067ffffffffffffffff811115611ff257611ff1613411565b5b6040519080825280602002602001820160405280156120205781602001602082028036833780820191505090505b50915060005b818110156120f957612036610dee565b73ffffffffffffffffffffffffffffffffffffffff1663e8a4c04e85838151811061206457612063614df0565b5b6020026020010151600001516040518263ffffffff1660e01b815260040161208c9190614fde565b602060405180830381865afa1580156120a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120cd9190615015565b8382815181106120e0576120df614df0565b5b6020026020010181815250508080600101915050612026565b5050919050565b600061210b836105bc565b905081600080858152602001908152602001600020600101819055508181847fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a4505050565b600060128260405161216d9190614c94565b9081526020016040518091039020805490509050919050565b60008082036121985760cc90506121ad565b8282036121a85760c890506121ad565b60ce90505b92915050565b6121bd8282610841565b6122005780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016121f7929190615051565b60405180910390fd5b5050565b6000816040015160000151905060008161ffff161415801561223b575061012c8161ffff16108061223a57506101368161ffff16115b5b1561227d57816040517f3afff42b00000000000000000000000000000000000000000000000000000000815260040161227491906150d8565b60405180910390fd5b6000826020015160200151519050612293612c68565b61ffff168160ff16146122dd57826040517f3afff42b0000000000000000000000000000000000000000000000000000000081526004016122d491906150d8565b60405180910390fd5b826010600086815260200190815260200160002060008201518160000160008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff0219169083600681111561234557612344613ba5565b5b0217905550604082015181600101908161235f919061529c565b50505060208201518160020160008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160010190805190602001906123aa92919061316b565b5060408201518160020160006101000a81548160ff021916908360058111156123d6576123d5613ba5565b5b021790555060608201518160030190816123f0919061529c565b50505060408201518160060160008201518160000160006101000a81548161ffff021916908361ffff1602179055506020820151816001019081612434919061529c565b5050509050507fc4c76143cbd497adc2b5bc159d932dcfa8483928a0d22661d1404ef1c68984a1846040516124699190614142565b60405180910390a150505050565b60006124866000801b33610841565b1561249457600190506124cb565b60008260088111156124a9576124a8613ba5565b5b60ff166001901b6124b985611a82565b60200151600001511661ffff16141590505b92915050565b60006124dc82611a82565b600001516000015180156124fc575060006124f6836115b7565b60400151115b9050919050565b6000806125108585612526565b905061251c8184610841565b9150509392505050565b60008061253284611a82565b602001516020015190506000815103612551576000801b915050612582565b8083600881111561256557612564613ba5565b5b8151811061257657612575614df0565b5b60200260200101519150505b92915050565b60008160405160200161259b91906150d8565b604051602081830303815290604052805190602001209050919050565b426011826040516125c99190614c94565b90815260200160405180910390206003018190555060006012826040516125f09190614c94565b9081526020016040518091039020805490501115612644576011816040516126189190614c94565b9081526020016040518091039020600201600081548092919061263a9061536e565b91905055506126a7565b60006011826040516126569190614c94565b90815260200160405180910390206002015411156126a65760118160405161267e9190614c94565b908152602001604051809103902060020160008154809291906126a09061536e565b91905055505b5b50565b6126b26131b8565b60008290507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84600001511480156126ee575060008460200151145b15612712576000846000018181525050600084602001818152505083915050612831565b6000846020015114801561272a575060008460000151145b1561274e5760018161273c9190614d35565b84602001818152505083915050612831565b60008460000151121561278157836000015160018261276d9190614d35565b6127779190614d78565b8460000181815250505b6000846020015112156127b45783602001516001826127a09190614d35565b6127aa9190614d78565b8460200181815250505b600184602001516127c59190614d78565b846000015113806127da575060008460000151125b806127e85750808460200151135b1561282c5783816040517f6de8558200000000000000000000000000000000000000000000000000000000815260040161282392919061544f565b60405180910390fd5b839150505b92915050565b6129ed81600a6040518060a0016040529081600082016040518060800160405290816000820160009054906101000a900460f01b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020016000820160029054906101000a900460f01b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020016000820160049054906101000a900460f01b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020016000820160069054906101000a900460f01b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681525050815260200160018201548152602001600282015481526020016003820154815260200160048201548152505061178f565b60006011826040516129ff9190614c94565b9081526020016040518091039020600301819055507f510fb78f495511d68f630cfabc06d8a58d5aeb7bc63f3538b9cd46923aa23e5d81604051612a439190614ce4565b60405180910390a150565b6000612a58610dee565b73ffffffffffffffffffffffffffffffffffffffff1663e8a4c04e83600001516040518263ffffffff1660e01b8152600401612a949190614fde565b602060405180830381865afa158015612ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad59190615015565b9050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f6e20077600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fd45d702846040518263ffffffff1660e01b8152600401612b709190614142565b602060405180830381865afa158015612b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb191906154a0565b846000015185604001516040518463ffffffff1660e01b8152600401612bd89291906154cd565b60206040518083038185885af1158015612bf6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c1b9190615015565b507f688cfefb012ebddc451bd5077139509d5fbfdfc92c33cba16d7e76f16c2f5da883604051612c4b9190614ce4565b60405180910390a1612c6283828460200151612c8e565b92915050565b60006001600880811115612c7f57612c7e613ba5565b5b612c8991906154fd565b905090565b6000612c998461215b565b905080821115612cf75760405180604001604052806000815260200182815250826040517f6de85582000000000000000000000000000000000000000000000000000000008152600401612cee92919061544f565b60405180910390fd5b808203612e0057601284604051612d0e9190614c94565b9081526020016040518091039020839080600181540180825580915050600190039060005260206000200160009091909190915055612d4b610dee565b73ffffffffffffffffffffffffffffffffffffffff16632be681f5846040518263ffffffff1660e01b8152600401612d839190614142565b602060405180830381865afa158015612da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc491906154a0565b601185604051612dd49190614c94565b90815260200160405180910390206001016000828254612df49190614dbc565b92505081905550612fd7565b612e08610dee565b73ffffffffffffffffffffffffffffffffffffffff16632be681f5601286604051612e339190614c94565b90815260200160405180910390208481548110612e5357612e52614df0565b5b90600052602060002001546040518263ffffffff1660e01b8152600401612e7a9190614142565b602060405180830381865afa158015612e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebb91906154a0565b612ec3610dee565b73ffffffffffffffffffffffffffffffffffffffff16632be681f5856040518263ffffffff1660e01b8152600401612efb9190614142565b602060405180830381865afa158015612f18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f3c91906154a0565b601186604051612f4c9190614c94565b908152602001604051809103902060010154612f689190614dbc565b612f729190615533565b601185604051612f829190614c94565b90815260200160405180910390206001018190555082601285604051612fa89190614c94565b90815260200160405180910390208381548110612fc857612fc7614df0565b5b90600052602060002001819055505b612fe0846125b8565b7fd9104dbb62c9778e68f07361617c0e7c290633d8fc9d4335dd0710803633b93b8483604051613011929190615576565b60405180910390a150505050565b6040518060400160405280613032613045565b815260200161303f6130fd565b81525090565b6040518060800160405280600061ffff168152602001613063613117565b81526020016130706130c5565b8152602001600080191681525090565b6040518060400160405280613093613045565b8152602001600080191681525090565b6040518060400160405280600061ffff168152602001600061ffff1681525090565b6040518060a001604052806130d86131d2565b8152602001600081526020016000815260200160008152602001600080191681525090565b604051806040016040528060608152602001600081525090565b604051806060016040528061312a61327e565b81526020016131376132b3565b81526020016131446132f1565b81525090565b5080546000825590600052602060002090810190613168919061330f565b50565b8280548282559060005260206000209081019282156131a7579160200282015b828111156131a657825182559160200191906001019061318b565b5b5090506131b4919061330f565b5090565b604051806040016040528060008152602001600081525090565b604051806080016040528060007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200160007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200160007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200160007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681525090565b6040518060600160405280600015158152602001600060068111156132a6576132a5613ba5565b5b8152602001606081525090565b6040518060800160405280600061ffff16815260200160608152602001600060058111156132e4576132e3613ba5565b5b8152602001606081525090565b6040518060400160405280600061ffff168152602001606081525090565b5b80821115613328576000816000905550600101613310565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61337581613340565b811461338057600080fd5b50565b6000813590506133928161336c565b92915050565b6000602082840312156133ae576133ad613336565b5b60006133bc84828501613383565b91505092915050565b60008115159050919050565b6133da816133c5565b82525050565b60006020820190506133f560008301846133d1565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61344982613400565b810181811067ffffffffffffffff8211171561346857613467613411565b5b80604052505050565b600061347b61332c565b90506134878282613440565b919050565b600080fd5b61349a816133c5565b81146134a557600080fd5b50565b6000813590506134b781613491565b92915050565b600781106134ca57600080fd5b50565b6000813590506134dc816134bd565b92915050565b600080fd5b600080fd5b600067ffffffffffffffff82111561350757613506613411565b5b61351082613400565b9050602081019050919050565b82818337600083830152505050565b600061353f61353a846134ec565b613471565b90508281526020810184848401111561355b5761355a6134e7565b5b61356684828561351d565b509392505050565b600082601f830112613583576135826134e2565b5b813561359384826020860161352c565b91505092915050565b6000606082840312156135b2576135b16133fb565b5b6135bc6060613471565b905060006135cc848285016134a8565b60008301525060206135e0848285016134cd565b602083015250604082013567ffffffffffffffff8111156136045761360361348c565b5b6136108482850161356e565b60408301525092915050565b600061ffff82169050919050565b6136338161361c565b811461363e57600080fd5b50565b6000813590506136508161362a565b92915050565b600067ffffffffffffffff82111561367157613670613411565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b61369a81613687565b81146136a557600080fd5b50565b6000813590506136b781613691565b92915050565b60006136d06136cb84613656565b613471565b905080838252602082019050602084028301858111156136f3576136f2613682565b5b835b8181101561371c578061370888826136a8565b8452602084019350506020810190506136f5565b5050509392505050565b600082601f83011261373b5761373a6134e2565b5b813561374b8482602086016136bd565b91505092915050565b6006811061376157600080fd5b50565b60008135905061377381613754565b92915050565b60006080828403121561378f5761378e6133fb565b5b6137996080613471565b905060006137a984828501613641565b600083015250602082013567ffffffffffffffff8111156137cd576137cc61348c565b5b6137d984828501613726565b60208301525060406137ed84828501613764565b604083015250606082013567ffffffffffffffff8111156138115761381061348c565b5b61381d8482850161356e565b60608301525092915050565b60006040828403121561383f5761383e6133fb565b5b6138496040613471565b9050600061385984828501613641565b600083015250602082013567ffffffffffffffff81111561387d5761387c61348c565b5b6138898482850161356e565b60208301525092915050565b6000606082840312156138ab576138aa6133fb565b5b6138b56060613471565b9050600082013567ffffffffffffffff8111156138d5576138d461348c565b5b6138e18482850161359c565b600083015250602082013567ffffffffffffffff8111156139055761390461348c565b5b61391184828501613779565b602083015250604082013567ffffffffffffffff8111156139355761393461348c565b5b61394184828501613829565b60408301525092915050565b60006020828403121561396357613962613336565b5b600082013567ffffffffffffffff8111156139815761398061333b565b5b61398d84828501613895565b91505092915050565b6000819050919050565b6139a981613996565b81146139b457600080fd5b50565b6000813590506139c6816139a0565b92915050565b6000606082840312156139e2576139e16133fb565b5b6139ec6060613471565b9050600082013567ffffffffffffffff811115613a0c57613a0b61348c565b5b613a188482850161356e565b6000830152506020613a2c848285016139b7565b6020830152506040613a40848285016136a8565b60408301525092915050565b6000819050919050565b613a5f81613a4c565b8114613a6a57600080fd5b50565b600081359050613a7c81613a56565b92915050565b600060408284031215613a9857613a976133fb565b5b613aa26040613471565b90506000613ab284828501613a6d565b6000830152506020613ac684828501613a6d565b60208301525092915050565b600060608284031215613ae857613ae76133fb565b5b613af26040613471565b9050600082013567ffffffffffffffff811115613b1257613b1161348c565b5b613b1e848285016139cc565b6000830152506020613b3284828501613a82565b60208301525092915050565b600060208284031215613b5457613b53613336565b5b600082013567ffffffffffffffff811115613b7257613b7161333b565b5b613b7e84828501613ad2565b91505092915050565b613b908161361c565b82525050565b613b9f816133c5565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60078110613be557613be4613ba5565b5b50565b6000819050613bf682613bd4565b919050565b6000613c0682613be8565b9050919050565b613c1681613bfb565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c56578082015181840152602081019050613c3b565b60008484015250505050565b6000613c6d82613c1c565b613c778185613c27565b9350613c87818560208601613c38565b613c9081613400565b840191505092915050565b6000606083016000830151613cb36000860182613b96565b506020830151613cc66020860182613c0d565b5060408301518482036040860152613cde8282613c62565b9150508091505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613d2081613687565b82525050565b6000613d328383613d17565b60208301905092915050565b6000602082019050919050565b6000613d5682613ceb565b613d608185613cf6565b9350613d6b83613d07565b8060005b83811015613d9c578151613d838882613d26565b9750613d8e83613d3e565b925050600181019050613d6f565b5085935050505092915050565b60068110613dba57613db9613ba5565b5b50565b6000819050613dcb82613da9565b919050565b6000613ddb82613dbd565b9050919050565b613deb81613dd0565b82525050565b6000608083016000830151613e096000860182613b87565b5060208301518482036020860152613e218282613d4b565b9150506040830151613e366040860182613de2565b5060608301518482036060860152613e4e8282613c62565b9150508091505092915050565b6000604083016000830151613e736000860182613b87565b5060208301518482036020860152613e8b8282613c62565b9150508091505092915050565b60006060830160008301518482036000860152613eb58282613c9b565b91505060208301518482036020860152613ecf8282613df1565b91505060408301518482036040860152613ee98282613e5b565b9150508091505092915050565b60007fffff00000000000000000000000000000000000000000000000000000000000082169050919050565b613f2b81613ef6565b82525050565b608082016000820151613f476000850182613f22565b506020820151613f5a6020850182613f22565b506040820151613f6d6040850182613f22565b506060820151613f806060850182613f22565b50505050565b613f8f81613996565b82525050565b61010082016000820151613fac6000850182613f31565b506020820151613fbf6080850182613f86565b506040820151613fd260a0850182613f86565b506060820151613fe560c0850182613f86565b506080820151613ff860e0850182613d17565b50505050565b6000610160830160008301516140176000860182613b87565b506020830151848203602086015261402f8282613e98565b91505060408301516140446040860182613f95565b506060830151614058610140860182613d17565b508091505092915050565b600060408301600083015184820360008601526140808282613d4b565b91505060208301516140956020860182613f86565b508091505092915050565b600060408301600083015184820360008601526140bd8282613ffe565b915050602083015184820360208601526140d78282614063565b9150508091505092915050565b600060208201905081810360008301526140fe81846140a0565b905092915050565b60006020828403121561411c5761411b613336565b5b600061412a848285016136a8565b91505092915050565b61413c81613687565b82525050565b60006020820190506141576000830184614133565b92915050565b60006020828403121561417357614172613336565b5b600082013567ffffffffffffffff8111156141915761419061333b565b5b61419d848285016139cc565b91505092915050565b6000610160830160008301516141bf6000860182613b87565b50602083015184820360208601526141d78282613e98565b91505060408301516141ec6040860182613f95565b506060830151614200610140860182613d17565b508091505092915050565b6000602082019050818103600083015261422581846141a6565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142588261422d565b9050919050565b6142688161424d565b811461427357600080fd5b50565b6000813590506142858161425f565b92915050565b600080604083850312156142a2576142a1613336565b5b60006142b0858286016136a8565b92505060206142c185828601614276565b9150509250929050565b6000604082840312156142e1576142e06133fb565b5b6142eb6040613471565b9050600082013567ffffffffffffffff81111561430b5761430a61348c565b5b614317848285016139cc565b600083015250602082013567ffffffffffffffff81111561433b5761433a61348c565b5b61434784828501613895565b60208301525092915050565b60006020828403121561436957614368613336565b5b600082013567ffffffffffffffff8111156143875761438661333b565b5b614393848285016142cb565b91505092915050565b600060408301600083015184820360008601526143b98282613ffe565b91505060208301516143ce6020860182613d17565b508091505092915050565b600060208201905081810360008301526143f3818461439c565b905092915050565b61440481613ef6565b811461440f57600080fd5b50565b600081359050614421816143fb565b92915050565b60006080828403121561443d5761443c6133fb565b5b6144476080613471565b9050600061445784828501614412565b600083015250602061446b84828501614412565b602083015250604061447f84828501614412565b604083015250606061449384828501614412565b60608301525092915050565b600067ffffffffffffffff8211156144ba576144b9613411565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156144e6576144e5613411565b5b6144ef82613400565b9050602081019050919050565b600061450f61450a846144cb565b613471565b90508281526020810184848401111561452b5761452a6134e7565b5b61453684828561351d565b509392505050565b600082601f830112614553576145526134e2565b5b81356145638482602086016144fc565b91505092915050565b600060608284031215614582576145816133fb565b5b61458c6060613471565b9050600082013567ffffffffffffffff8111156145ac576145ab61348c565b5b6145b88482850161453e565b60008301525060206145cc848285016139b7565b60208301525060406145e084828501614276565b60408301525092915050565b60006145ff6145fa8461449f565b613471565b9050808382526020820190506020840283018581111561462257614621613682565b5b835b8181101561466957803567ffffffffffffffff811115614647576146466134e2565b5b808601614654898261456c565b85526020850194505050602081019050614624565b5050509392505050565b600082601f830112614688576146876134e2565b5b81356146988482602086016145ec565b91505092915050565b600060c082840312156146b7576146b66133fb565b5b6146c16060613471565b9050600082013567ffffffffffffffff8111156146e1576146e061348c565b5b6146ed848285016139cc565b600083015250602061470184828501614427565b60208301525060a082013567ffffffffffffffff8111156147255761472461348c565b5b61473184828501614673565b60408301525092915050565b60006020828403121561475357614752613336565b5b600082013567ffffffffffffffff8111156147715761477061333b565b5b61477d848285016146a1565b91505092915050565b6000819050919050565b60006147ab6147a66147a18461422d565b614786565b61422d565b9050919050565b60006147bd82614790565b9050919050565b60006147cf826147b2565b9050919050565b6147df816147c4565b82525050565b60006020820190506147fa60008301846147d6565b92915050565b600060408284031215614816576148156133fb565b5b6148206040613471565b9050600082013567ffffffffffffffff8111156148405761483f61348c565b5b61484c848285016139cc565b600083015250602082013567ffffffffffffffff8111156148705761486f61348c565b5b61487c84828501614673565b60208301525092915050565b60006020828403121561489e5761489d613336565b5b600082013567ffffffffffffffff8111156148bc576148bb61333b565b5b6148c884828501614800565b91505092915050565b60006148dc826147b2565b9050919050565b6148ec816148d1565b82525050565b600060208201905061490760008301846148e3565b92915050565b60006020828403121561492357614922613336565b5b600082013567ffffffffffffffff8111156149415761494061333b565b5b61494d8482850161356e565b91505092915050565b60408201600082015161496c6000850182613b87565b50602082015161497f6020850182613b87565b50505050565b600060408201905061499a6000830184614956565b92915050565b60006040820190506149b56000830185614133565b6149c26020830184614133565b9392505050565b60006149d48261424d565b9050919050565b6149e4816149c9565b81146149ef57600080fd5b50565b600081519050614a01816149db565b92915050565b600060208284031215614a1d57614a1c613336565b5b6000614a2b848285016149f2565b91505092915050565b600082825260208201905092915050565b7f4d6574686f64204e6f7420416c6c6f7765640000000000000000000000000000600082015250565b6000614a7b601283614a34565b9150614a8682614a45565b602082019050919050565b614a9a8161361c565b82525050565b60006060820190508181036000830152614ab981614a6e565b9050614ac86020830185614a91565b614ad560408301846133d1565b9392505050565b7f5265736f7572636520496d6d757461626c650000000000000000000000000000600082015250565b6000614b12601283614a34565b9150614b1d82614adc565b602082019050919050565b60006060820190508181036000830152614b4181614b05565b9050614b506020830185614a91565b614b5d60408301846133d1565b9392505050565b7f4e6f7420466f756e640000000000000000000000000000000000000000000000600082015250565b6000614b9a600983614a34565b9150614ba582614b64565b602082019050919050565b60006040820190508181036000830152614bc981614b8d565b9050614bd860208301846133d1565b92915050565b7f466f7262696464656e0000000000000000000000000000000000000000000000600082015250565b6000614c14600983614a34565b9150614c1f82614bde565b602082019050919050565b60006040820190508181036000830152614c4381614c07565b9050614c526020830184614133565b92915050565b600081905092915050565b6000614c6e82613c1c565b614c788185614c58565b9350614c88818560208601613c38565b80840191505092915050565b6000614ca08284614c63565b915081905092915050565b6000614cb682613c1c565b614cc08185614a34565b9350614cd0818560208601613c38565b614cd981613400565b840191505092915050565b60006020820190508181036000830152614cfe8184614cab565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d4082613a4c565b9150614d4b83613a4c565b9250828203905081811260008412168282136000851215161715614d7257614d71614d06565b5b92915050565b6000614d8382613a4c565b9150614d8e83613a4c565b925082820190508281121560008312168382126000841215161715614db657614db5614d06565b5b92915050565b6000614dc782613996565b9150614dd283613996565b9250828201905080821115614dea57614de9614d06565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e6657607f821691505b602082108103614e7957614e78614e1f565b5b50919050565b61010082016000820151614e966000850182613f31565b506020820151614ea96080850182613f86565b506040820151614ebc60a0850182613f86565b506060820151614ecf60c0850182613f86565b506080820151614ee260e0850182613d17565b50505050565b600082825260208201905092915050565b6000614f0482613ceb565b614f0e8185614ee8565b9350614f1983613d07565b8060005b83811015614f4a578151614f318882613d26565b9750614f3c83613d3e565b925050600181019050614f1d565b5085935050505092915050565b600061012082019050614f6d6000830185614e7f565b818103610100830152614f808184614ef9565b90509392505050565b600081519050919050565b600082825260208201905092915050565b6000614fb082614f89565b614fba8185614f94565b9350614fca818560208601613c38565b614fd381613400565b840191505092915050565b60006020820190508181036000830152614ff88184614fa5565b905092915050565b60008151905061500f81613691565b92915050565b60006020828403121561502b5761502a613336565b5b600061503984828501615000565b91505092915050565b61504b8161424d565b82525050565b60006040820190506150666000830185615042565b6150736020830184614133565b9392505050565b600060608301600083015184820360008601526150978282613c9b565b915050602083015184820360208601526150b18282613df1565b915050604083015184820360408601526150cb8282613e5b565b9150508091505092915050565b600060208201905081810360008301526150f2818461507a565b905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261515c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261511f565b615166868361511f565b95508019841693508086168417925050509392505050565b600061519961519461518f84613996565b614786565b613996565b9050919050565b6000819050919050565b6151b38361517e565b6151c76151bf826151a0565b84845461512c565b825550505050565b600090565b6151dc6151cf565b6151e78184846151aa565b505050565b5b8181101561520b576152006000826151d4565b6001810190506151ed565b5050565b601f82111561525057615221816150fa565b61522a8461510f565b81016020851015615239578190505b61524d6152458561510f565b8301826151ec565b50505b505050565b600082821c905092915050565b600061527360001984600802615255565b1980831691505092915050565b600061528c8383615262565b9150826002028217905092915050565b6152a582613c1c565b67ffffffffffffffff8111156152be576152bd613411565b5b6152c88254614e4e565b6152d382828561520f565b600060209050601f83116001811461530657600084156152f4578287015190505b6152fe8582615280565b865550615366565b601f198416615314866150fa565b60005b8281101561533c57848901518255600182019150602085019450602081019050615317565b868310156153595784890151615355601f891682615262565b8355505b6001600288020188555050505b505050505050565b600061537982613996565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036153ab576153aa614d06565b5b600182019050919050565b7f4f7574206f6620426f756e647300000000000000000000000000000000000000600082015250565b60006153ec600d83614a34565b91506153f7826153b6565b602082019050919050565b61540b81613a4c565b82525050565b6040820160008201516154276000850182615402565b50602082015161543a6020850182615402565b50505050565b61544981613a4c565b82525050565b60006080820190508181036000830152615468816153df565b90506154776020830185615411565b6154846060830184615440565b9392505050565b60008151905061549a816139a0565b92915050565b6000602082840312156154b6576154b5613336565b5b60006154c48482850161548b565b91505092915050565b600060408201905081810360008301526154e78185614fa5565b90506154f66020830184615042565b9392505050565b60006155088261361c565b91506155138361361c565b9250828201905061ffff81111561552d5761552c614d06565b5b92915050565b600061553e82613996565b915061554983613996565b925082820390508181111561556157615560614d06565b5b92915050565b61557081613996565b82525050565b600060408201905081810360008301526155908185614cab565b905061559f6020830184615567565b939250505056fea26469706673582212208d0f2aff1c7c6bb6bb8c4fa1e7c0c2ac06d17b31ea19035c75273072c27845b364736f6c634300081c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
