60806040526001600755348015610014575f80fd5b50336040518060600160405280602a81526020016143bf602a913961003e816100c460201b60201c565b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100af575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100a691906101d9565b60405180910390fd5b6100be816100d760201b60201c565b506104fb565b80600290816100d3919061042c565b5050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101c38261019a565b9050919050565b6101d3816101b9565b82525050565b5f6020820190506101ec5f8301846101ca565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061026d57607f821691505b6020821081036102805761027f610229565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026102e27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826102a7565b6102ec86836102a7565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61033061032b61032684610304565b61030d565b610304565b9050919050565b5f819050919050565b61034983610316565b61035d61035582610337565b8484546102b3565b825550505050565b5f90565b610371610365565b61037c818484610340565b505050565b5b8181101561039f576103945f82610369565b600181019050610382565b5050565b601f8211156103e4576103b581610286565b6103be84610298565b810160208510156103cd578190505b6103e16103d985610298565b830182610381565b50505b505050565b5f82821c905092915050565b5f6104045f19846008026103e9565b1980831691505092915050565b5f61041c83836103f5565b9150826002028217905092915050565b610435826101f2565b67ffffffffffffffff81111561044e5761044d6101fc565b5b6104588254610256565b6104638282856103a3565b5f60209050601f831160018114610494575f8415610482578287015190505b61048c8582610411565b8655506104f3565b601f1984166104a286610286565b5f5b828110156104c9578489015182556001820191506020850194506020810190506104a4565b868310156104e657848901516104e2601f8916826103f5565b8355505b6001600288020188555050505b505050505050565b613eb7806105085f395ff3fe608060405260043610610149575f3560e01c806360fb85fd116100b5578063a22cb4651161006e578063a22cb465146104c5578063bc197c81146104ed578063e985e9c514610529578063f23a6e6114610565578063f242432a146105a1578063f2fde38b146105c957610149565b806360fb85fd146103c257806366269bfc14610403578063715018a61461043f5780638bf0af3e146104555780638da5cb5b14610471578063908118401461049b57610149565b806320e7c6d41161010757806320e7c6d41461027c5780632650a47c146102bd5780632bf217b1146102e55780632eb2c2d6146103225780634e1273f41461034a5780635b2cdb221461038657610149565b8062fdd58e1461014d57806301ffc9a714610189578063047087cc146101c557806305e19236146101f05780630e89341c146102185780631fdfe21214610254575b5f80fd5b348015610158575f80fd5b50610173600480360381019061016e9190612ba3565b6105f1565b6040516101809190612bf0565b60405180910390f35b348015610194575f80fd5b506101af60048036038101906101aa9190612c5e565b610646565b6040516101bc9190612ca3565b60405180910390f35b3480156101d0575f80fd5b506101d9610657565b6040516101e7929190612cbc565b60405180910390f35b3480156101fb575f80fd5b5061021660048036038101906102119190612d0d565b6106c8565b005b348015610223575f80fd5b5061023e60048036038101906102399190612d5d565b610817565b60405161024b9190612df8565b60405180910390f35b34801561025f575f80fd5b5061027a60048036038101906102759190612e18565b6108a9565b005b348015610287575f80fd5b506102a2600480360381019061029d9190612d5d565b610b47565b6040516102b496959493929190612e65565b60405180910390f35b3480156102c8575f80fd5b506102e360048036038101906102de9190612e18565b610bab565b005b3480156102f0575f80fd5b5061030b60048036038101906103069190612ec4565b610d3f565b604051610319929190612cbc565b60405180910390f35b34801561032d575f80fd5b50610348600480360381019061034391906130f2565b610e6d565b005b348015610355575f80fd5b50610370600480360381019061036b919061327d565b610ebf565b60405161037d91906133aa565b60405180910390f35b348015610391575f80fd5b506103ac60048036038101906103a79190612e18565b610fc6565b6040516103b991906133ca565b60405180910390f35b3480156103cd575f80fd5b506103e860048036038101906103e39190612d5d565b61100e565b6040516103fa969594939291906133e3565b60405180910390f35b34801561040e575f80fd5b5061042960048036038101906104249190612d5d565b6110fd565b60405161043691906134f9565b60405180910390f35b34801561044a575f80fd5b506104536111ee565b005b61046f600480360381019061046a9190612e18565b611201565b005b34801561047c575f80fd5b5061048561153f565b60405161049291906133ca565b60405180910390f35b3480156104a6575f80fd5b506104af611567565b6040516104bc9190612bf0565b60405180910390f35b3480156104d0575f80fd5b506104eb60048036038101906104e69190613519565b61156d565b005b3480156104f8575f80fd5b50610513600480360381019061050e91906130f2565b611583565b6040516105209190613566565b60405180910390f35b348015610534575f80fd5b5061054f600480360381019061054a919061357f565b611597565b60405161055c9190612ca3565b60405180910390f35b348015610570575f80fd5b5061058b600480360381019061058691906135bd565b611625565b6040516105989190613566565b60405180910390f35b3480156105ac575f80fd5b506105c760048036038101906105c291906135bd565b611639565b005b3480156105d4575f80fd5b506105ef60048036038101906105ea9190613650565b611658565b005b5f805f8381526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f610650826116dc565b9050919050565b5f805f805f600190505b6007548110156106bb5760045f8281526020019081526020015f205f01548361068a91906136a8565b925060045f8281526020019081526020015f2060010154826106ac91906136a8565b91508080600101915050610661565b5081819350935050509091565b5f60045f8581526020019081526020015f2090505f815f015411610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071890613725565b60405180910390fd5b8060030160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107aa9061378d565b60405180910390fd5b82816003015f6101000a81548160ff021916908315150217905550818160020181905550837fab2770b29de2adc49d0c01df43d08c90be7762fb986cc83601866a2b78a2cf9e84846040516108099291906137ab565b60405180910390a250505050565b606060028054610826906137ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610852906137ff565b801561089d5780601f106108745761010080835404028352916020019161089d565b820191905f5260205f20905b81548152906001019060200180831161088057829003601f168201915b50505050509050919050565b6108b1611755565b5f60075490505f82846108c4919061382f565b90505f60045f8481526020019081526020015f205f01541461091b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610912906138ba565b60405180910390fd5b6040518060c001604052808281526020018281526020018481526020016001151581526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018581525060045f8481526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff02191690831515021790555060808201518160030160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816004015590505060055f8381526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f8481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610aee30838360405180602001604052805f8152506117dc565b817f3c6a495d6ebc5387576dc0e114d29e024f1ad1b86e0cc06a403722f05e518f4e828587604051610b22939291906138d8565b60405180910390a260075f815480929190610b3c9061390d565b919050555050505050565b6004602052805f5260405f205f91509050805f015490806001015490806002015490806003015f9054906101000a900460ff16908060030160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905086565b5f670de0b6b3a764000082610bc0919061382f565b90505f60045f8581526020019081526020015f2090505f815f015411610c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1290613725565b60405180910390fd5b8060030160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca4906139c4565b60405180910390fd5b5f47905082811015610cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ceb90613a2c565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015610d37573d5f803e3d5ffd5b505050505050565b5f805f60045f8681526020019081526020015f206040518060c00160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff161515151581526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201548152505090505f815f015111610e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3390613725565b60405180910390fd5b610e4684866105f1565b9250805f0151606484610e59919061382f565b610e639190613a77565b9150509250929050565b610e7a8585858585611871565b5f5b8351811015610eb757610eaa848281518110610e9b57610e9a613aa7565b5b60200260200101518787611918565b8080600101915050610e7c565b505050505050565b60608151835114610f0b57815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401610f02929190612cbc565b60405180910390fd5b5f835167ffffffffffffffff811115610f2757610f26612f06565b5b604051908082528060200260200182016040528015610f555781602001602082028036833780820191505090505b5090505f5b8451811015610fbb57610f91610f798287611acb90919063ffffffff16565b610f8c8387611ade90919063ffffffff16565b6105f1565b828281518110610fa457610fa3613aa7565b5b602002602001018181525050806001019050610f5a565b508091505092915050565b6005602052815f5260405f208181548110610fdf575f80fd5b905f5260205f20015f915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f805f805f60045f8981526020019081526020015f206040518060c00160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff161515151581526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201548152505090508060a00151815f015182602001518360400151846060015185608001519650965096509650965096505091939550919395565b60605f60045f8481526020019081526020015f205f015411611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114b90613725565b60405180910390fd5b60055f8381526020019081526020015f208054806020026020016040519081016040528092919081815260200182805480156111e257602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611199575b50505050509050919050565b6111f6611755565b6111ff5f611af1565b565b5f60045f8481526020019081526020015f209050806003015f9054906101000a900460ff16611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c90613b1e565b60405180910390fd5b81816001015410156112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a390613b86565b60405180910390fd5b5f670de0b6b3a76400008260020154846112c6919061382f565b6112d0919061382f565b905080341015611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90613bee565b60405180910390fd5b80341115611372575f813461132a9190613c0c565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561136f573d5f803e3d5ffd5b50505b82826001015f8282546113859190613c0c565b925050819055505f8260010154036113b3575f826003015f6101000a81548160ff0219169083151502179055505b6113ce3033868660405180602001604052805f815250611bb4565b60065f8581526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166114ff5760055f8581526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f8681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b837faf357506555a8fdf38c81d9a8fa2c6bca372e817f179cf596c9645902a927aea3385604051611531929190613c3f565b60405180910390a250505050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075481565b61157f611578611cba565b8383611cc1565b5050565b5f63bc197c8160e01b905095945050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f63f23a6e6160e01b905095945050505050565b6116468585858585611e2a565b611651838686611918565b5050505050565b611660611755565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116d0575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016116c791906133ca565b60405180910390fd5b6116d981611af1565b50565b5f7f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061174e575061174d82611ed1565b5b9050919050565b61175d611cba565b73ffffffffffffffffffffffffffffffffffffffff1661177b61153f565b73ffffffffffffffffffffffffffffffffffffffff16146117da5761179e611cba565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016117d191906133ca565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361184c575f6040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161184391906133ca565b60405180910390fd5b5f806118588585611fb2565b915091506118695f87848487611fe2565b505050505050565b5f61187a611cba565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156118bf57506118bd8682611597565b155b156119035780866040517fe237d9220000000000000000000000000000000000000000000000000000000081526004016118fa929190613c66565b60405180910390fd5b611910868686868661208e565b505050505050565b5f61192383856105f1565b148015611985575060065f8481526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611995576119948383612182565b5b60065f8481526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611ac65760055f8481526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f8581526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b505050565b5f60208202602084010151905092915050565b5f60208202602084010151905092915050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611c24575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401611c1b91906133ca565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611c94575f6040517f01a83514000000000000000000000000000000000000000000000000000000008152600401611c8b91906133ca565b60405180910390fd5b5f80611ca08585611fb2565b91509150611cb18787848487611fe2565b50505050505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d31575f6040517fced3e100000000000000000000000000000000000000000000000000000000008152600401611d2891906133ca565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e1d9190612ca3565b60405180910390a3505050565b5f611e33611cba565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015611e785750611e768682611597565b155b15611ebc5780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401611eb3929190613c66565b60405180910390fd5b611ec98686868686611bb4565b505050505050565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f9b57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611fab5750611faa826123ae565b5b9050919050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b611fee85858585612417565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612087575f61202a611cba565b90506001845103612076575f6120495f86611ade90919063ffffffff16565b90505f61205f5f86611ade90919063ffffffff16565b905061206f8389898585896127a7565b5050612085565b612084818787878787612956565b5b505b5050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036120fe575f6040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016120f591906133ca565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361216e575f6040517f01a8351400000000000000000000000000000000000000000000000000000000815260040161216591906133ca565b60405180910390fd5b61217b8585858585611fe2565b5050505050565b5f60055f8481526020019081526020015f208054905090505f5b81811015612345578273ffffffffffffffffffffffffffffffffffffffff1660055f8681526020019081526020015f2082815481106121de576121dd613aa7565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036123385760055f8581526020019081526020015f2060018361223f9190613c0c565b815481106122505761224f613aa7565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660055f8681526020019081526020015f20828154811061229b5761229a613aa7565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060055f8581526020019081526020015f2080548061230157612300613c8d565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612345565b808060010191505061219c565b505f60065f8581526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b805182511461246157815181516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401612458929190612cbc565b60405180910390fd5b5f61246a611cba565b90505f5b8351811015612666575f61248b8286611ade90919063ffffffff16565b90505f6124a18386611ade90919063ffffffff16565b90505f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146125c4575f805f8481526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561257057888183856040517f03dee4c50000000000000000000000000000000000000000000000000000000081526004016125679493929190613cba565b60405180910390fd5b8181035f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461265957805f808481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461265191906136a8565b925050819055505b505080600101905061246e565b506001835103612721575f6126845f85611ade90919063ffffffff16565b90505f61269a5f85611ade90919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612712929190612cbc565b60405180910390a450506127a0565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612797929190613cfd565b60405180910390a45b5050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b111561294e578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612807959493929190613d84565b6020604051808303815f875af192505050801561284257506040513d601f19601f8201168201806040525081019061283f9190613df0565b60015b6128c3573d805f8114612870576040519150601f19603f3d011682016040523d82523d5f602084013e612875565b606091505b505f8151036128bb57846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016128b291906133ca565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461294c57846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161294391906133ca565b60405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1115612afd578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016129b6959493929190613e1b565b6020604051808303815f875af19250505080156129f157506040513d601f19601f820116820180604052508101906129ee9190613df0565b60015b612a72573d805f8114612a1f576040519150601f19603f3d011682016040523d82523d5f602084013e612a24565b606091505b505f815103612a6a57846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401612a6191906133ca565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612afb57846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401612af291906133ca565b60405180910390fd5b505b505050505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b3f82612b16565b9050919050565b612b4f81612b35565b8114612b59575f80fd5b50565b5f81359050612b6a81612b46565b92915050565b5f819050919050565b612b8281612b70565b8114612b8c575f80fd5b50565b5f81359050612b9d81612b79565b92915050565b5f8060408385031215612bb957612bb8612b0e565b5b5f612bc685828601612b5c565b9250506020612bd785828601612b8f565b9150509250929050565b612bea81612b70565b82525050565b5f602082019050612c035f830184612be1565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c3d81612c09565b8114612c47575f80fd5b50565b5f81359050612c5881612c34565b92915050565b5f60208284031215612c7357612c72612b0e565b5b5f612c8084828501612c4a565b91505092915050565b5f8115159050919050565b612c9d81612c89565b82525050565b5f602082019050612cb65f830184612c94565b92915050565b5f604082019050612ccf5f830185612be1565b612cdc6020830184612be1565b9392505050565b612cec81612c89565b8114612cf6575f80fd5b50565b5f81359050612d0781612ce3565b92915050565b5f805f60608486031215612d2457612d23612b0e565b5b5f612d3186828701612b8f565b9350506020612d4286828701612cf9565b9250506040612d5386828701612b8f565b9150509250925092565b5f60208284031215612d7257612d71612b0e565b5b5f612d7f84828501612b8f565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612dca82612d88565b612dd48185612d92565b9350612de4818560208601612da2565b612ded81612db0565b840191505092915050565b5f6020820190508181035f830152612e108184612dc0565b905092915050565b5f8060408385031215612e2e57612e2d612b0e565b5b5f612e3b85828601612b8f565b9250506020612e4c85828601612b8f565b9150509250929050565b612e5f81612b35565b82525050565b5f60c082019050612e785f830189612be1565b612e856020830188612be1565b612e926040830187612be1565b612e9f6060830186612c94565b612eac6080830185612e56565b612eb960a0830184612be1565b979650505050505050565b5f8060408385031215612eda57612ed9612b0e565b5b5f612ee785828601612b8f565b9250506020612ef885828601612b5c565b9150509250929050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612f3c82612db0565b810181811067ffffffffffffffff82111715612f5b57612f5a612f06565b5b80604052505050565b5f612f6d612b05565b9050612f798282612f33565b919050565b5f67ffffffffffffffff821115612f9857612f97612f06565b5b602082029050602081019050919050565b5f80fd5b5f612fbf612fba84612f7e565b612f64565b90508083825260208201905060208402830185811115612fe257612fe1612fa9565b5b835b8181101561300b5780612ff78882612b8f565b845260208401935050602081019050612fe4565b5050509392505050565b5f82601f83011261302957613028612f02565b5b8135613039848260208601612fad565b91505092915050565b5f80fd5b5f67ffffffffffffffff8211156130605761305f612f06565b5b61306982612db0565b9050602081019050919050565b828183375f83830152505050565b5f61309661309184613046565b612f64565b9050828152602081018484840111156130b2576130b1613042565b5b6130bd848285613076565b509392505050565b5f82601f8301126130d9576130d8612f02565b5b81356130e9848260208601613084565b91505092915050565b5f805f805f60a0868803121561310b5761310a612b0e565b5b5f61311888828901612b5c565b955050602061312988828901612b5c565b945050604086013567ffffffffffffffff81111561314a57613149612b12565b5b61315688828901613015565b935050606086013567ffffffffffffffff81111561317757613176612b12565b5b61318388828901613015565b925050608086013567ffffffffffffffff8111156131a4576131a3612b12565b5b6131b0888289016130c5565b9150509295509295909350565b5f67ffffffffffffffff8211156131d7576131d6612f06565b5b602082029050602081019050919050565b5f6131fa6131f5846131bd565b612f64565b9050808382526020820190506020840283018581111561321d5761321c612fa9565b5b835b8181101561324657806132328882612b5c565b84526020840193505060208101905061321f565b5050509392505050565b5f82601f83011261326457613263612f02565b5b81356132748482602086016131e8565b91505092915050565b5f806040838503121561329357613292612b0e565b5b5f83013567ffffffffffffffff8111156132b0576132af612b12565b5b6132bc85828601613250565b925050602083013567ffffffffffffffff8111156132dd576132dc612b12565b5b6132e985828601613015565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61332581612b70565b82525050565b5f613336838361331c565b60208301905092915050565b5f602082019050919050565b5f613358826132f3565b61336281856132fd565b935061336d8361330d565b805f5b8381101561339d578151613384888261332b565b975061338f83613342565b925050600181019050613370565b5085935050505092915050565b5f6020820190508181035f8301526133c2818461334e565b905092915050565b5f6020820190506133dd5f830184612e56565b92915050565b5f60c0820190506133f65f830189612be1565b6134036020830188612be1565b6134106040830187612be1565b61341d6060830186612be1565b61342a6080830185612c94565b61343760a0830184612e56565b979650505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61347481612b35565b82525050565b5f613485838361346b565b60208301905092915050565b5f602082019050919050565b5f6134a782613442565b6134b1818561344c565b93506134bc8361345c565b805f5b838110156134ec5781516134d3888261347a565b97506134de83613491565b9250506001810190506134bf565b5085935050505092915050565b5f6020820190508181035f830152613511818461349d565b905092915050565b5f806040838503121561352f5761352e612b0e565b5b5f61353c85828601612b5c565b925050602061354d85828601612cf9565b9150509250929050565b61356081612c09565b82525050565b5f6020820190506135795f830184613557565b92915050565b5f806040838503121561359557613594612b0e565b5b5f6135a285828601612b5c565b92505060206135b385828601612b5c565b9150509250929050565b5f805f805f60a086880312156135d6576135d5612b0e565b5b5f6135e388828901612b5c565b95505060206135f488828901612b5c565b945050604061360588828901612b8f565b935050606061361688828901612b8f565b925050608086013567ffffffffffffffff81111561363757613636612b12565b5b613643888289016130c5565b9150509295509295909350565b5f6020828403121561366557613664612b0e565b5b5f61367284828501612b5c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6136b282612b70565b91506136bd83612b70565b92508282019050808211156136d5576136d461367b565b5b92915050565b7f4c616e642070617263656c20646f6573206e6f742065786973740000000000005f82015250565b5f61370f601a83612d92565b915061371a826136db565b602082019050919050565b5f6020820190508181035f83015261373c81613703565b9050919050565b7f4f6e6c792073656c6c65722063616e207570646174652073616c6500000000005f82015250565b5f613777601b83612d92565b915061378282613743565b602082019050919050565b5f6020820190508181035f8301526137a48161376b565b9050919050565b5f6040820190506137be5f830185612c94565b6137cb6020830184612be1565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061381657607f821691505b602082108103613829576138286137d2565b5b50919050565b5f61383982612b70565b915061384483612b70565b925082820261385281612b70565b915082820484148315176138695761386861367b565b5b5092915050565b7f4c616e642070617263656c20616c7265616479206578697374730000000000005f82015250565b5f6138a4601a83612d92565b91506138af82613870565b602082019050919050565b5f6020820190508181035f8301526138d181613898565b9050919050565b5f6060820190506138eb5f830186612be1565b6138f86020830185612be1565b6139056040830184612be1565b949350505050565b5f61391782612b70565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139495761394861367b565b5b600182019050919050565b7f4f6e6c79207468652073656c6c65722063616e2077697468647261772066756e5f8201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b5f6139ae602283612d92565b91506139b982613954565b604082019050919050565b5f6020820190508181035f8301526139db816139a2565b9050919050565b7f496e73756666696369656e7420636f6e74726163742062616c616e63650000005f82015250565b5f613a16601d83612d92565b9150613a21826139e2565b602082019050919050565b5f6020820190508181035f830152613a4381613a0a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613a8182612b70565b9150613a8c83612b70565b925082613a9c57613a9b613a4a565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4c616e642070617263656c206e6f7420666f722073616c6500000000000000005f82015250565b5f613b08601883612d92565b9150613b1382613ad4565b602082019050919050565b5f6020820190508181035f830152613b3581613afc565b9050919050565b7f496e73756666696369656e7420746f6b656e7320617661696c61626c650000005f82015250565b5f613b70601d83612d92565b9150613b7b82613b3c565b602082019050919050565b5f6020820190508181035f830152613b9d81613b64565b9050919050565b7f496e636f7272656374207061796d656e7420616d6f756e7400000000000000005f82015250565b5f613bd8601883612d92565b9150613be382613ba4565b602082019050919050565b5f6020820190508181035f830152613c0581613bcc565b9050919050565b5f613c1682612b70565b9150613c2183612b70565b9250828203905081811115613c3957613c3861367b565b5b92915050565b5f604082019050613c525f830185612e56565b613c5f6020830184612be1565b9392505050565b5f604082019050613c795f830185612e56565b613c866020830184612e56565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f608082019050613ccd5f830187612e56565b613cda6020830186612be1565b613ce76040830185612be1565b613cf46060830184612be1565b95945050505050565b5f6040820190508181035f830152613d15818561334e565b90508181036020830152613d29818461334e565b90509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f613d5682613d32565b613d608185613d3c565b9350613d70818560208601612da2565b613d7981612db0565b840191505092915050565b5f60a082019050613d975f830188612e56565b613da46020830187612e56565b613db16040830186612be1565b613dbe6060830185612be1565b8181036080830152613dd08184613d4c565b90509695505050505050565b5f81519050613dea81612c34565b92915050565b5f60208284031215613e0557613e04612b0e565b5b5f613e1284828501613ddc565b91505092915050565b5f60a082019050613e2e5f830188612e56565b613e3b6020830187612e56565b8181036040830152613e4d818661334e565b90508181036060830152613e61818561334e565b90508181036080830152613e758184613d4c565b9050969550505050505056fea264697066735822122070b981c68a37d2380722db5394631f74e77bd02d6b56023bfaa1d6a7bc70ab6864736f6c634300081a003368747470733a2f2f6170692e6578616d706c652e636f6d2f6d657461646174612f7b69647d2e6a736f6e