60806040526040518060800160405280604281526020016144a160429139600a908161002b919061044e565b506115b3600b5561012c600c556608e1bc9bf04000600d556103e8600e556001600f555f601055600160115f6101000a81548160ff021916908315150217905550348015610077575f80fd5b506040518060400160405280600781526020017f526163434f4f4c000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f52434c000000000000000000000000000000000000000000000000000000000081525081600290816100f3919061044e565b508060039081610103919061044e565b5061011261014260201b60201c565b5f81905550505061013561012a61014a60201b60201c565b61015160201b60201c565b600160098190555061051d565b5f6001905090565b5f33905090565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061028f57607f821691505b6020821081036102a2576102a161024b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826102c9565b61030e86836102c9565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61035261034d61034884610326565b61032f565b610326565b9050919050565b5f819050919050565b61036b83610338565b61037f61037782610359565b8484546102d5565b825550505050565b5f90565b610393610387565b61039e818484610362565b505050565b5b818110156103c1576103b65f8261038b565b6001810190506103a4565b5050565b601f821115610406576103d7816102a8565b6103e0846102ba565b810160208510156103ef578190505b6104036103fb856102ba565b8301826103a3565b50505b505050565b5f82821c905092915050565b5f6104265f198460080261040b565b1980831691505092915050565b5f61043e8383610417565b9150826002028217905092915050565b61045782610214565b67ffffffffffffffff8111156104705761046f61021e565b5b61047a8254610278565b6104858282856103c5565b5f60209050601f8311600181146104b6575f84156104a4578287015190505b6104ae8582610433565b865550610515565b601f1984166104c4866102a8565b5f5b828110156104eb578489015182556001820191506020850194506020810190506104c6565b868310156105085784890151610504601f891682610417565b8355505b6001600288020188555050505b505050505050565b613f778061052a5f395ff3fe60806040526004361061020e575f3560e01c806370a0823111610117578063b88d4fde1161009f578063d5abeb011161006e578063d5abeb0114610734578063e985e9c51461075e578063efdc77881461079a578063f2fde38b146107c2578063f6511f93146107ea5761020e565b8063b88d4fde1461067c578063c6a91b42146106a4578063c87b56dd146106ce578063d547cfb71461070a5761020e565b8063982d669e116100e6578063982d669e146105bc57806398710d1e146105e65780639e9fcffc14610610578063a0712d6814610638578063a22cb465146106545761020e565b806370a0823114610516578063715018a6146105525780638da5cb5b1461056857806395d89b41146105925761020e565b80631e84c4131161019a57806328cad13d1161016957806328cad13d1461044c5780633ccfd60b1461047457806342842e0e1461048a57806355f804b3146104b25780636352211e146104da5761020e565b80631e84c413146103aa578063202f298a146103d4578063228025e8146103fc57806323b872dd146104245761020e565b8063095ea7b3116101e1578063095ea7b3146102de5780630a00ae831461030657806318160ddd1461032e5780631919fed714610358578063193ad7b4146103805761020e565b806301ffc9a71461021257806306fdde031461024e57806307e89ec014610278578063081812fc146102a2575b5f80fd5b34801561021d575f80fd5b5061023860048036038101906102339190612c77565b610826565b6040516102459190612cbc565b60405180910390f35b348015610259575f80fd5b50610262610907565b60405161026f9190612d45565b60405180910390f35b348015610283575f80fd5b5061028c610997565b6040516102999190612d7d565b60405180910390f35b3480156102ad575f80fd5b506102c860048036038101906102c39190612dc0565b61099d565b6040516102d59190612e2a565b60405180910390f35b3480156102e9575f80fd5b5061030460048036038101906102ff9190612e6d565b610a15565b005b348015610311575f80fd5b5061032c60048036038101906103279190612dc0565b610b1e565b005b348015610339575f80fd5b50610342610ba4565b60405161034f9190612d7d565b60405180910390f35b348015610363575f80fd5b5061037e60048036038101906103799190612dc0565b610bb9565b005b34801561038b575f80fd5b50610394610c3f565b6040516103a19190612d7d565b60405180910390f35b3480156103b5575f80fd5b506103be610c45565b6040516103cb9190612cbc565b60405180910390f35b3480156103df575f80fd5b506103fa60048036038101906103f59190612dc0565b610c57565b005b348015610407575f80fd5b50610422600480360381019061041d9190612dc0565b610cdd565b005b34801561042f575f80fd5b5061044a60048036038101906104459190612eab565b610d63565b005b348015610457575f80fd5b50610472600480360381019061046d9190612f25565b610d73565b005b34801561047f575f80fd5b50610488610e0b565b005b348015610495575f80fd5b506104b060048036038101906104ab9190612eab565b610ee8565b005b3480156104bd575f80fd5b506104d860048036038101906104d3919061307c565b610f07565b005b3480156104e5575f80fd5b5061050060048036038101906104fb9190612dc0565b610f96565b60405161050d9190612e2a565b60405180910390f35b348015610521575f80fd5b5061053c600480360381019061053791906130c3565b610faa565b6040516105499190612d7d565b60405180910390f35b34801561055d575f80fd5b50610566611074565b005b348015610573575f80fd5b5061057c6110fb565b6040516105899190612e2a565b60405180910390f35b34801561059d575f80fd5b506105a6611123565b6040516105b39190612d45565b60405180910390f35b3480156105c7575f80fd5b506105d06111b3565b6040516105dd9190612d7d565b60405180910390f35b3480156105f1575f80fd5b506105fa6111b9565b6040516106079190612d7d565b60405180910390f35b34801561061b575f80fd5b5061063660048036038101906106319190612dc0565b6111bf565b005b610652600480360381019061064d9190612dc0565b611245565b005b34801561065f575f80fd5b5061067a600480360381019061067591906130ee565b611519565b005b348015610687575f80fd5b506106a2600480360381019061069d91906131ca565b61168b565b005b3480156106af575f80fd5b506106b8611707565b6040516106c59190612d7d565b60405180910390f35b3480156106d9575f80fd5b506106f460048036038101906106ef9190612dc0565b61170d565b6040516107019190612d45565b60405180910390f35b348015610715575f80fd5b5061071e611789565b60405161072b9190612d45565b60405180910390f35b34801561073f575f80fd5b50610748611815565b6040516107559190612d7d565b60405180910390f35b348015610769575f80fd5b50610784600480360381019061077f919061324a565b61181b565b6040516107919190612cbc565b60405180910390f35b3480156107a5575f80fd5b506107c060048036038101906107bb9190612dc0565b6118a9565b005b3480156107cd575f80fd5b506107e860048036038101906107e391906130c3565b6119cb565b005b3480156107f5575f80fd5b50610810600480360381019061080b9190612dc0565b611ac1565b60405161081d9190612d7d565b60405180910390f35b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061090057506108ff82611b08565b5b9050919050565b606060028054610916906132b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610942906132b5565b801561098d5780601f106109645761010080835404028352916020019161098d565b820191905f5260205f20905b81548152906001019060200180831161097057829003601f168201915b5050505050905090565b600d5481565b5f6109a782611b71565b6109dd576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610a1f82610f96565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a86576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aa5611bba565b73ffffffffffffffffffffffffffffffffffffffff1614158015610ad75750610ad581610ad0611bba565b61181b565b155b15610b0e576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b19838383611bc1565b505050565b610b26611bba565b73ffffffffffffffffffffffffffffffffffffffff16610b446110fb565b73ffffffffffffffffffffffffffffffffffffffff1614610b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b919061332f565b60405180910390fd5b80600e8190555050565b5f610bad611c70565b6001545f540303905090565b610bc1611bba565b73ffffffffffffffffffffffffffffffffffffffff16610bdf6110fb565b73ffffffffffffffffffffffffffffffffffffffff1614610c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2c9061332f565b60405180910390fd5b80600d8190555050565b60105481565b60115f9054906101000a900460ff1681565b610c5f611bba565b73ffffffffffffffffffffffffffffffffffffffff16610c7d6110fb565b73ffffffffffffffffffffffffffffffffffffffff1614610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca9061332f565b60405180910390fd5b80600f8190555050565b610ce5611bba565b73ffffffffffffffffffffffffffffffffffffffff16610d036110fb565b73ffffffffffffffffffffffffffffffffffffffff1614610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d509061332f565b60405180910390fd5b80600b8190555050565b610d6e838383611c78565b505050565b610d7b611bba565b73ffffffffffffffffffffffffffffffffffffffff16610d996110fb565b73ffffffffffffffffffffffffffffffffffffffff1614610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de69061332f565b60405180910390fd5b8060115f6101000a81548160ff02191690831515021790555050565b610e13611bba565b73ffffffffffffffffffffffffffffffffffffffff16610e316110fb565b73ffffffffffffffffffffffffffffffffffffffff1614610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e9061332f565b60405180910390fd5b600260095403610ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec390613397565b60405180910390fd5b6002600981905550610ede334761210e565b6001600981905550565b610f0283838360405180602001604052805f81525061168b565b505050565b610f0f611bba565b73ffffffffffffffffffffffffffffffffffffffff16610f2d6110fb565b73ffffffffffffffffffffffffffffffffffffffff1614610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a9061332f565b60405180910390fd5b80600a9081610f929190613552565b5050565b5f610fa0826121fe565b5f01519050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611010576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61107c611bba565b73ffffffffffffffffffffffffffffffffffffffff1661109a6110fb565b73ffffffffffffffffffffffffffffffffffffffff16146110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e79061332f565b60405180910390fd5b6110f95f61247a565b565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054611132906132b5565b80601f016020809104026020016040519081016040528092919081815260200182805461115e906132b5565b80156111a95780601f10611180576101008083540402835291602001916111a9565b820191905f5260205f20905b81548152906001019060200180831161118c57829003601f168201915b5050505050905090565b600e5481565b600f5481565b6111c7611bba565b73ffffffffffffffffffffffffffffffffffffffff166111e56110fb565b73ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112329061332f565b60405180910390fd5b80600c8190555050565b60115f9054906101000a900460ff16611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a9061366b565b60405180910390fd5b6001600b546112a291906136b6565b816112ab610ba4565b6112b591906136b6565b11156112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed90613733565b60405180910390fd5b5f61130082611ac1565b90505f7340e57e7a1dfb124e7e0fb7d5b634bb97f34c41f39050600e548360105461132b91906136b6565b11156113bd5734821115611374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136b9061379b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f193505050501580156113b7573d5f803e3d5ffd5b5061150a565b600f54836113ca33610faa565b6113d491906136b6565b11156114ab573482111561141d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114149061379b565b60405180910390fd5b600c54831115611462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145990613829565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f193505050501580156114a5573d5f803e3d5ffd5b50611509565b600f548311156114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790613829565b60405180910390fd5b8260105f82825461150191906136b6565b925050819055505b5b611514338461253d565b505050565b611521611bba565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611585576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060075f611591611bba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661163a611bba565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161167f9190612cbc565b60405180910390a35050565b611696848484611c78565b6116b58373ffffffffffffffffffffffffffffffffffffffff1661255a565b80156116ca57506116c88484848461257c565b155b15611701576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600c5481565b606061171882611b71565b611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e906138b7565b60405180910390fd5b600a611762836126c7565b604051602001611773929190613a23565b6040516020818303038152906040529050919050565b600a8054611796906132b5565b80601f01602080910402602001604051908101604052809291908181526020018280546117c2906132b5565b801561180d5780601f106117e45761010080835404028352916020019161180d565b820191905f5260205f20905b8154815290600101906020018083116117f057829003601f168201915b505050505081565b600b5481565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b6118b1611bba565b73ffffffffffffffffffffffffffffffffffffffff166118cf6110fb565b73ffffffffffffffffffffffffffffffffffffffff1614611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c9061332f565b60405180910390fd5b5f8111611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e90613aa6565b60405180910390fd5b600b5481611973610ba4565b61197d91906136b6565b11156119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b590613b0e565b60405180910390fd5b6119c8338261253d565b50565b6119d3611bba565b73ffffffffffffffffffffffffffffffffffffffff166119f16110fb565b73ffffffffffffffffffffffffffffffffffffffff1614611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e9061332f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aac90613b9c565b60405180910390fd5b611abe8161247a565b50565b5f60328203611ada57670186cc6acd4b00009050611b03565b60648203611af2576702a303fe4b5300009050611b03565b81600d54611b009190613bba565b90505b919050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f81611b7b611c70565b11158015611b8957505f5482105b8015611bb3575060045f8381526020019081526020015f205f01601c9054906101000a900460ff16155b9050919050565b5f33905090565b8260065f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b5f6001905090565b5f611c82826121fe565b90508373ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff1614611cec576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8473ffffffffffffffffffffffffffffffffffffffff16611d0c611bba565b73ffffffffffffffffffffffffffffffffffffffff161480611d3b5750611d3a85611d35611bba565b61181b565b5b80611d805750611d49611bba565b73ffffffffffffffffffffffffffffffffffffffff16611d688461099d565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611db9576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e1e576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e2b8585856001612820565b611e365f8487611bc1565b600160055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f8282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f8282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f60045f8581526020019081526020015f20905084815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042815f0160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f6001850190505f60045f8381526020019081526020015f2090505f73ffffffffffffffffffffffffffffffffffffffff16815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361209c575f54821461209b5787815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508460200151815f0160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121078585856001612826565b5050505050565b80471015612151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214890613c45565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff168260405161217690613c90565b5f6040518083038185875af1925050503d805f81146121b0576040519150601f19603f3d011682016040523d82523d5f602084013e6121b5565b606091505b50509050806121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f090613d14565b60405180910390fd5b505050565b612206612bd1565b5f82905080612213611c70565b1115801561222157505f5481105b15612443575f60045f8381526020019081526020015f206040518060600160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f8201601c9054906101000a900460ff16151515158152505090508060400151612441575f73ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff161461232d578092505050612475565b5b6001156124405781806001900392505060045f8381526020019081526020015f206040518060600160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f8201601c9054906101000a900460ff16151515158152505090505f73ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff161461243b578092505050612475565b61232e565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612556828260405180602001604052805f81525061282c565b5050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f8373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125a1611bba565b8786866040518563ffffffff1660e01b81526004016125c39493929190613d84565b6020604051808303815f875af19250505080156125fe57506040513d601f19601f820116820180604052508101906125fb9190613de2565b60015b612674573d805f811461262c576040519150601f19603f3d011682016040523d82523d5f602084013e612631565b606091505b505f81510361266c576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60605f820361270d576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061281b565b5f8290505f5b5f821461273c57808061272590613e0d565b915050600a826127359190613e81565b9150612713565b5f8167ffffffffffffffff81111561275757612756612f58565b5b6040519080825280601f01601f1916602001820160405280156127895781602001600182028036833780820191505090505b5090505b5f8514612814576001826127a19190613eb1565b9150600a856127b09190613ee4565b60306127bc91906136b6565b60f81b8183815181106127d2576127d1613f14565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a8561280d9190613e81565b945061278d565b8093505050505b919050565b50505050565b50505050565b5f805490505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612896576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f83036128cf576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128db5f858386612820565b8260055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f8282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508260055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508360045f8381526020019081526020015f205f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260045f8381526020019081526020015f205f0160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f8190505f8482019050612a8c8673ffffffffffffffffffffffffffffffffffffffff1661255a565b15612b4d575b818673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612aff5f87848060010195508761257c565b612b35576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808203612a9257825f5414612b48575f80fd5b612bb7565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808203612b4e575b815f819055505050612bcb5f858386612826565b50505050565b60405180606001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f67ffffffffffffffff1681526020015f151581525090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c5681612c22565b8114612c60575f80fd5b50565b5f81359050612c7181612c4d565b92915050565b5f60208284031215612c8c57612c8b612c1a565b5b5f612c9984828501612c63565b91505092915050565b5f8115159050919050565b612cb681612ca2565b82525050565b5f602082019050612ccf5f830184612cad565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612d1782612cd5565b612d218185612cdf565b9350612d31818560208601612cef565b612d3a81612cfd565b840191505092915050565b5f6020820190508181035f830152612d5d8184612d0d565b905092915050565b5f819050919050565b612d7781612d65565b82525050565b5f602082019050612d905f830184612d6e565b92915050565b612d9f81612d65565b8114612da9575f80fd5b50565b5f81359050612dba81612d96565b92915050565b5f60208284031215612dd557612dd4612c1a565b5b5f612de284828501612dac565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612e1482612deb565b9050919050565b612e2481612e0a565b82525050565b5f602082019050612e3d5f830184612e1b565b92915050565b612e4c81612e0a565b8114612e56575f80fd5b50565b5f81359050612e6781612e43565b92915050565b5f8060408385031215612e8357612e82612c1a565b5b5f612e9085828601612e59565b9250506020612ea185828601612dac565b9150509250929050565b5f805f60608486031215612ec257612ec1612c1a565b5b5f612ecf86828701612e59565b9350506020612ee086828701612e59565b9250506040612ef186828701612dac565b9150509250925092565b612f0481612ca2565b8114612f0e575f80fd5b50565b5f81359050612f1f81612efb565b92915050565b5f60208284031215612f3a57612f39612c1a565b5b5f612f4784828501612f11565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612f8e82612cfd565b810181811067ffffffffffffffff82111715612fad57612fac612f58565b5b80604052505050565b5f612fbf612c11565b9050612fcb8282612f85565b919050565b5f67ffffffffffffffff821115612fea57612fe9612f58565b5b612ff382612cfd565b9050602081019050919050565b828183375f83830152505050565b5f61302061301b84612fd0565b612fb6565b90508281526020810184848401111561303c5761303b612f54565b5b613047848285613000565b509392505050565b5f82601f83011261306357613062612f50565b5b813561307384826020860161300e565b91505092915050565b5f6020828403121561309157613090612c1a565b5b5f82013567ffffffffffffffff8111156130ae576130ad612c1e565b5b6130ba8482850161304f565b91505092915050565b5f602082840312156130d8576130d7612c1a565b5b5f6130e584828501612e59565b91505092915050565b5f806040838503121561310457613103612c1a565b5b5f61311185828601612e59565b925050602061312285828601612f11565b9150509250929050565b5f67ffffffffffffffff82111561314657613145612f58565b5b61314f82612cfd565b9050602081019050919050565b5f61316e6131698461312c565b612fb6565b90508281526020810184848401111561318a57613189612f54565b5b613195848285613000565b509392505050565b5f82601f8301126131b1576131b0612f50565b5b81356131c184826020860161315c565b91505092915050565b5f805f80608085870312156131e2576131e1612c1a565b5b5f6131ef87828801612e59565b945050602061320087828801612e59565b935050604061321187828801612dac565b925050606085013567ffffffffffffffff81111561323257613231612c1e565b5b61323e8782880161319d565b91505092959194509250565b5f80604083850312156132605761325f612c1a565b5b5f61326d85828601612e59565b925050602061327e85828601612e59565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806132cc57607f821691505b6020821081036132df576132de613288565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613319602083612cdf565b9150613324826132e5565b602082019050919050565b5f6020820190508181035f8301526133468161330d565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f613381601f83612cdf565b915061338c8261334d565b602082019050919050565b5f6020820190508181035f8301526133ae81613375565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026134117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826133d6565b61341b86836133d6565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61345661345161344c84612d65565b613433565b612d65565b9050919050565b5f819050919050565b61346f8361343c565b61348361347b8261345d565b8484546133e2565b825550505050565b5f90565b61349761348b565b6134a2818484613466565b505050565b5b818110156134c5576134ba5f8261348f565b6001810190506134a8565b5050565b601f82111561350a576134db816133b5565b6134e4846133c7565b810160208510156134f3578190505b6135076134ff856133c7565b8301826134a7565b50505b505050565b5f82821c905092915050565b5f61352a5f198460080261350f565b1980831691505092915050565b5f613542838361351b565b9150826002028217905092915050565b61355b82612cd5565b67ffffffffffffffff81111561357457613573612f58565b5b61357e82546132b5565b6135898282856134c9565b5f60209050601f8311600181146135ba575f84156135a8578287015190505b6135b28582613537565b865550613619565b601f1984166135c8866133b5565b5f5b828110156135ef578489015182556001820191506020850194506020810190506135ca565b8683101561360c5784890151613608601f89168261351b565b8355505b6001600288020188555050505b505050505050565b7f5075626c69632073616c65206973206e6f74206f70656e0000000000000000005f82015250565b5f613655601783612cdf565b915061366082613621565b602082019050919050565b5f6020820190508181035f83015261368281613649565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6136c082612d65565b91506136cb83612d65565b92508282019050808211156136e3576136e2613689565b5b92915050565b7f4e6f206d6f7265000000000000000000000000000000000000000000000000005f82015250565b5f61371d600783612cdf565b9150613728826136e9565b602082019050919050565b5f6020820190508181035f83015261374a81613711565b9050919050565b7f496e636f7272656374204554482076616c75652073656e7400000000000000005f82015250565b5f613785601883612cdf565b915061379082613751565b602082019050919050565b5f6020820190508181035f8301526137b281613779565b9050919050565b7f4d6178206d696e747320706572207472616e73616374696f6e206578636565645f8201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b5f613813602283612cdf565b915061381e826137b9565b604082019050919050565b5f6020820190508181035f83015261384081613807565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f5f8201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b5f6138a1602f83612cdf565b91506138ac82613847565b604082019050919050565b5f6020820190508181035f8301526138ce81613895565b9050919050565b5f81905092915050565b5f81546138eb816132b5565b6138f581866138d5565b9450600182165f811461390f576001811461392457613956565b60ff1983168652811515820286019350613956565b61392d856133b5565b5f5b8381101561394e5781548189015260018201915060208101905061392f565b838801955050505b50505092915050565b7f2f000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6139936001836138d5565b915061399e8261395f565b600182019050919050565b5f6139b382612cd5565b6139bd81856138d5565b93506139cd818560208601612cef565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f613a0d6005836138d5565b9150613a18826139d9565b600582019050919050565b5f613a2e82856138df565b9150613a3982613987565b9150613a4582846139a9565b9150613a5082613a01565b91508190509392505050565b7f496e76616c6964206d696e7420616d6f756e74000000000000000000000000005f82015250565b5f613a90601383612cdf565b9150613a9b82613a5c565b602082019050919050565b5f6020820190508181035f830152613abd81613a84565b9050919050565b7f4d6178696d756d20737570706c792065786365656465640000000000000000005f82015250565b5f613af8601783612cdf565b9150613b0382613ac4565b602082019050919050565b5f6020820190508181035f830152613b2581613aec565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613b86602683612cdf565b9150613b9182613b2c565b604082019050919050565b5f6020820190508181035f830152613bb381613b7a565b9050919050565b5f613bc482612d65565b9150613bcf83612d65565b9250828202613bdd81612d65565b91508282048414831517613bf457613bf3613689565b5b5092915050565b7f416464726573733a20696e73756666696369656e742062616c616e63650000005f82015250565b5f613c2f601d83612cdf565b9150613c3a82613bfb565b602082019050919050565b5f6020820190508181035f830152613c5c81613c23565b9050919050565b5f81905092915050565b50565b5f613c7b5f83613c63565b9150613c8682613c6d565b5f82019050919050565b5f613c9a82613c70565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c20725f8201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b5f613cfe603a83612cdf565b9150613d0982613ca4565b604082019050919050565b5f6020820190508181035f830152613d2b81613cf2565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f613d5682613d32565b613d608185613d3c565b9350613d70818560208601612cef565b613d7981612cfd565b840191505092915050565b5f608082019050613d975f830187612e1b565b613da46020830186612e1b565b613db16040830185612d6e565b8181036060830152613dc38184613d4c565b905095945050505050565b5f81519050613ddc81612c4d565b92915050565b5f60208284031215613df757613df6612c1a565b5b5f613e0484828501613dce565b91505092915050565b5f613e1782612d65565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e4957613e48613689565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613e8b82612d65565b9150613e9683612d65565b925082613ea657613ea5613e54565b5b828204905092915050565b5f613ebb82612d65565b9150613ec683612d65565b9250828203905081811115613ede57613edd613689565b5b92915050565b5f613eee82612d65565b9150613ef983612d65565b925082613f0957613f08613e54565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea264697066735822122078ac5961408012f3a5d53ff91bf7fc7387b2e501cb43ceaef259243b17d04a6164736f6c63430008190033697066733a2f2f6261667962656966376f686a71796e7561766d6c626c693435766d637466736b333665736664743472676e656f36367765656a346d687a6f613469